Comment puis-je renvoyer un code d'état 404 / 50x à partir d'un contrôleur Grails?
-
07-07-2019 - |
Question
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)
qui fonctionne parfaitement, 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, quelle est la meilleure façon de procéder?
La solution
Définir le statut de la réponse avec sa propre instruction est suffisant. Cela ne semble pas trop laid et c'est assez simple:
response.status = 404;
Je l'ai utilisé avec succès moi-même et ont vu d’autres le faire de cette façon . Puisqu'il ne s'agit que d'un passeur, vous pouvez également effectuer d'autres tâches après avoir défini le statut. Quel que soit l'état que vous avez défini en dernier, ce sera ce que HttpServletResponse utilise lorsqu'il envoie la réponse au client.
Autres conseils
response.sendError (404)
fonctionnera avec Grails UrlMappings
alors que response.status = 404
ne le fait pas pour une raison quelconque. Ceci est utile si vous souhaitez afficher une page d'erreur 404 personnalisée, par opposition à un simple renvoi de 404 au navigateur.
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/ réf / Contrôleurs / render.html
response.sendError
et response.setStatus
sont les deux seules façons que je connaisse. Si vous importez HttpServletResponse de manière statique
, ce n'est pas du tout un 'type de grails'.