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

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

response.sendError(HttpServletResponse.SC_NOT_FOUND)

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


person Jack Chu    schedule 15.09.2009    source источник


Ответы (4)


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

response.status = 404;

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

person Rob Hruska    schedule 06.10.2009

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

person Thody    schedule 05.03.2011

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

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

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

person Alex Beardsley    schedule 03.06.2013

response.sendError и response.setStatus — это единственные два известных мне способа. Если вы static import HttpServletResponse, то это не так уж "не похоже на Grails".

person leebutts    schedule 15.09.2009