53 votes

Comment puis-je renvoyer un code d'état 404 / 50x à partir d'un contrôleur Grails?

J'ai un contrôleur qui doit renvoyer une page 404 et un code d'état sous certaines conditions. Je n'arrive pas à trouver comment faire cela à Grails. Un collègue a recommandé cette méthode:

 response.sendError(HttpServletResponse.SC_NOT_FOUND)
 

ce qui fonctionne parfaitement bien, mais ce n'est pas très semblable à Grails. Je sais que la méthode de rendu de Rails prend un argument de statut, mais le rendu de Grails ne possède pas une telle fonctionnalité. Y a-t-il quelque chose qui me manque, quel est le meilleur moyen d'y parvenir?

49voto

Rob Hruska Points 39151

Réglage de l'état de la réponse à sa propre déclaration est assez bon. Il n'a pas l'air trop moche et c'est assez simple:

response.status = 404;

J'ai utilisé avec succès, moi-même et ai vu d'autres le faire de cette façon aussi. Puisque c'est juste un setter, vous pouvez aussi faire d'autres choses après la définition de l'état. Selon le statut de la dernier sera ce que l'HttpServletResponse utilise quand il envoie la réponse au client.

43voto

Thody Points 787

response.sendError(404) travaillera avec Grails UrlMappings alors que response.status = 404 ne fonctionne pas pour une raison quelconque. Cela est utile si vous souhaitez afficher une page d'erreur 404 personnalisée, par opposition à un simple renvoi de 404 au navigateur.

43voto

Alex Beardsley Points 4983

Je ne sais pas dans quelle version cela a commencé, mais vous pouvez faire dans Grails 2.2.1:

 render(status: 503, text: 'Failed to do stuff.')
 

http://grails.org/doc/2.2.1/ref/Controllers/render.html

8voto

leebutts Points 4372

response.sendError et response.setStatus sont les deux seules façons que je connaisse. Si vous static import HttpServletResponse , alors ce n'est pas ce "non-grails-like".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X