Grails:返回404并显示我的'Not Found'页面,显示无效ID

Mar*_*Dow 7 grails

在Grails控制器操作中处理无效ID的最佳方法是什么?

MyDomainClass.get(params['i'])回报我的控制器操作空我希望用户看到我的自定义"未找到"页面,并要返回一个404 HTTP响应代码-我想不出这样做最彻底的方法.

谢谢.

小智 8

我在我的控制器中使用了以下内容,其中'notFound'是一个自定义的404页面:

def show = {
        def referenceData = ReferenceData.get( params.id )    
        if (referenceData)
        { return [ referenceData : referenceData ] }
        else 
        { redirect(uri:'/notFound') }
    }
Run Code Online (Sandbox Code Playgroud)

我还在UrlMapping.groovy中映射了自定义错误页面,例如

static mappings = {
   "403"(controller: "errors", action: "forbidden")
   "404"(controller: "errors", action: "notFound")
   "500"(controller: "errors", action: "serverError")
}
Run Code Online (Sandbox Code Playgroud)

要么

static mappings = {
   "403"(view: "/errors/forbidden")
   "404"(view: "/errors/notFound")
   "500"(view: "/errors/serverError")
}
Run Code Online (Sandbox Code Playgroud)

Grails Docs - 映射到响应代码

  • @JoshDiehl是对的.此实现首先发送302,然后发送404,您应该立即返回404. (2认同)

hvg*_*des 4

编辑 - 对于误读你的问题,我深表歉意。render 方法需要一个状态代码。所以在控制器中,如果没有找到任何内容,请尝试

render status: 404
Run Code Online (Sandbox Code Playgroud)

或者

render view: you_not_found_view
Run Code Online (Sandbox Code Playgroud)

或两者(在一次渲染调用中)。