Como posso devolver um código de status 404 / 50x de um controlador Grails?
-
07-07-2019 - |
Pergunta
Eu tenho um controlador que precisa voltar uma página 404 e código de status sob certas condições. Eu não consigo descobrir como fazer isso em Grails. Um colega de trabalho recomendou este método:
response.sendError(HttpServletResponse.SC_NOT_FOUND)
que funciona perfeitamente bem, mas não é muito Grails-like. Eu sei Rails' método render tomar um argumento status, mas Grails' tornar não tem essa funcionalidade. Existe algo que eu estou ausente, qual é a melhor maneira de conseguir isso?
Solução
A definição do status de resposta com a sua própria declaração é bom o suficiente. Ele não parece muito feio e é bastante simples:
response.status = 404;
Eu usei isso com êxito mim e vi outros fazê-lo desta forma também. Uma vez que é apenas um setter, você também pode fazer outras coisas depois de definir o status. Qualquer que seja o estado de definir último será o que o HttpServletResponse usa quando ele realmente envia a volta resposta para o cliente.
Outras dicas
response.sendError(404)
irá trabalhar com Grails UrlMappings
enquanto response.status = 404
não por algum motivo. Isso é útil se você quiser processar uma página de erro 404 personalizada, ao invés de apenas o envio de 404 volta para o navegador.
Eu não sei o que versão isso começou, mas em Grails 2.2.1 você pode fazer:
render(status: 503, text: 'Failed to do stuff.')
http://grails.org/doc/2.2.1/ ref / Controladores / render.html
response.sendError
e response.setStatus
são as únicas duas maneiras que eu conheço. Se você static import HttpServletResponse
, então não é que 'un-grails-like'.