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?
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.
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.
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.')
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".