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


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

response.sendError(HttpServletResponse.SC_NOT_FOUND)

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

4 51

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 есть только два способа, которые я знаю. Если вы static import HttpServletResponse, тогда это не то, что "un-grails-like".