3

我尝试为未找到的 URL 创建自定义 404 url​​ 映射:

"/test" {
    controller="test"
}
"404" {
    controller="application"
    action="send404"
}
"500" {
    controller="application"
    action="send500"
}

但是由于某种原因,控制器和动作永远不会被调用。我得到默认的容器 404 页面。所以,我尝试了:

"/test" {
    controller="test"
}
"/**" {
    controller="application"
    action="send404"
}
"500" {
    controller="application"
    action="send500"
}

这似乎工作正常,除了它似乎也对每个 request调用 send404 操作。例如,如果我点击 /test,我会看到测试页面,但我也会得到我在 send404() 操作中所做的日志语句。

想法赞赏...

4

3 回答 3

2

如本答案所述,您是否尝试过在声明中删除空格?

"404"(controller:'application', action:'send404')

还有一个关于此主题的未解决问题GRAILS-4232 。

于 2012-11-23T10:18:41.493 回答
1

在 grails 中,有一个 ErrorController,它在 500 上呈现堆栈跟踪,等等。

class UrlMappings {
  static mappings {
    "403" (controller: "error", action: "forbidden")
    "404" (controller: "error", action: "notFound")
    "500" (controller: "error", action: "internalError")
  }
}

然后,您可以render(controller:"error", action"notFound")在另一个控制器中保持 RESTful。或者它会自动渲染错误控制器的 notFound 动作。

更多细节在这里: http: //groovy.dzone.com/articles/grails-exception-handling-http

于 2012-12-18T20:42:05.917 回答
0

可能是浏览器在每次请求时请求的 favicon.ico 导致这种情况发生。

// Route 404 to this action to see!
def send404() {

    log.error("404 Page Not Found! " + request.forwardURI)
    response.status = 404;
    render(view:"/application/not-found.gsp")        
}
于 2012-12-20T17:44:57.323 回答