如何从Grails控制器返回404/50x状态代码?

Jac*_*Chu 53 error-handling grails groovy http-status-code-404

我有一个控制器需要在某些条件下返回404页面和状态代码.我似乎无法在Grails中找到如何做到这一点.同事推荐这种方法:

response.sendError(HttpServletResponse.SC_NOT_FOUND)
Run Code Online (Sandbox Code Playgroud)

它的效果非常好,但它并不像Grails那样.我知道Rails的render方法采用status参数,但Grails的render没有这样的功能.有什么我想念的,有什么最好的方法来完成这个?

Rob*_*ska 49

使用自己的语句设置响应状态就足够了.它看起来不太难看,非常简单:

response.status = 404;
Run Code Online (Sandbox Code Playgroud)

我自己成功地使用了它,并且看到其他人也这样做了.由于它只是一个setter,你也可以在设置状态后做其他事情.您最后设置的状态将是HttpServletResponse在将响应实际发送回客户端时使用的状态.


Tho*_*ody 43

response.sendError(404)将与Grails合作,UrlMappingsresponse.status = 404不是出于某种原因.如果要渲染自定义404错误页面,而不是仅将404发送回浏览器,这将非常有用.


Ale*_*ley 43

我不知道这个版本是从哪个版本开始的,但是在Grails 2.2.1中你可以做到:

render(status: 503, text: 'Failed to do stuff.')
Run Code Online (Sandbox Code Playgroud)

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


lee*_*tts 8

response.sendError并且response.setStatus是我所知道的两种方式.如果你static import HttpServletResponse,那就不是'不像grails一样'.