Как я могу вернуть код состояния 404 / 50x с контроллера Grails?

У меня есть контроллер, который должен возвращать страницу 404 и код состояния при определенных условиях. Кажется, я не могу узнать, как это сделать в Grails. Коллега порекомендовал такой метод:

response.sendError(HttpServletResponse.SC_NOT_FOUND)

который отлично работает, но он не очень похож на граали. Я знаю, что метод рендеринга Rails принимает аргумент status, но рендеринг Grails не имеет такой функциональности. Есть ли что-то, чего мне не хватает, каков наилучший способ достичь этого?

4 ответов


установка состояния ответа с помощью собственного оператора достаточно хороша. Это не выглядит слишком уродливо и довольно просто:

response.status = 404;

Я успешно использовал это сам и видели другие делают это таким образом тоже. Так это просто сеттер, вы также можете делать другие вещи, после установки статуса. Какой бы статус вы ни установили последним, это будет то, что использует HttpServletResponse, когда он фактически отправляет ответ клиенту.


response.sendError(404) будет работать с граалями UrlMappings, тогда как response.status = 404 почему-то нет. Это полезно, если вы хотите отобразить пользовательскую страницу ошибки 404, а не просто отправить 404 обратно в браузер.


Я не знаю, какой версии это началось, но в Grails 2.2.1 вы можете сделать:

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

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


response.sendError и response.setStatus есть только два способа, о которых я знаю. Если ты ... --2-->, тогда это не то, что "un-grails-like".