web-dev-qa-db-fra.com

Comment puis-je retourner 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 à certaines conditions. Je n'arrive pas à trouver comment faire ça à 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 aux Grails. Je sais que la méthode de rendu de Rails prend un argument de statut, mais le rendu de Grails n'a pas une telle fonctionnalité. Y a-t-il quelque chose qui me manque, quelle est la meilleure façon d'y parvenir?

52
Jack Chu

La définition du statut de réponse avec sa propre déclaration est suffisante. Ça n'a pas l'air trop moche et c'est assez simple:

response.status = 404;

J'ai moi-même utilisé cela avec succès et j'ai vu d'autres le faire de cette façon aussi. Comme il ne s'agit que d'un setter, vous pouvez également faire d'autres choses après avoir défini le statut. Quel que soit l'état que vous définissez en dernier, c'est ce que HttpServletResponse utilise lorsqu'il renvoie réellement la réponse au client.

48
Rob Hruska

response.sendError(404) fonctionnera avec Grails UrlMappings alors que response.status = 404 ne fonctionne pas pour une raison quelconque. Ceci est utile si vous souhaitez afficher une page d'erreur 404 personnalisée, au lieu de simplement renvoyer 404 au navigateur.

43
Thody

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

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

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

43
Alex Beardsley

response.sendError et response.setStatus sont les deux seuls moyens que je connaisse. Si vous static import HttpServletResponse, alors ce n'est pas si "pas comme les grails".

8
leebutts