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 d'erreur 404 et un code d'état dans certaines conditions. Je ne semble pas trouver comment faire cela dans Grails. Un collègue m'a recommandé cette méthode:

response.sendError(HttpServletResponse.SC_NOT_FOUND)

qui fonctionne parfaitement bien, mais ce n'est pas très Grails-like. Je sais que la méthode render de Rails prend un argument de statut, mais la méthode render de Grails n'a pas une telle fonctionnalité. Est-ce que j'ai raté quelque chose, quel est le meilleur moyen d'accomplir cela?

49voto

Rob Hruska Points 39151

Le réglage du statut de réponse avec sa propre déclaration est suffisamment bon. Cela ne semble pas trop moche et est assez simple :

response.status = 404;

Je l'ai utilisé avec succès moi-même et j'ai vu d'autres le faire de cette façon aussi. Comme c'est juste un setter, vous pouvez également faire d'autres choses après avoir défini le statut. Le statut que vous définissez en dernier sera celui que HttpServletResponse utilisera lorsque il enverra réellement la réponse au client.

43voto

Thody Points 787

response.sendError(404) fonctionnera 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, au lieu d'envoyer simplement 404 au navigateur.

43voto

Alex Beardsley Points 4983

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

render(status: 503, text: 'Échec pour faire des choses.')

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

8voto

leebutts Points 4372

response.sendError et response.setStatus sont les seules deux façons que je connais. Si vous import statique HttpServletResponse, alors ce n'est pas si "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