假设我想为所有 /foo URI 返回一个 BadRequest 结果类型:
override def onBadRequest(r: RequestHeader, error: String) = {
BadRequest("Bad Request: " + error)
}
override def onRouteRequest(r: RequestHeader): Option[Handler] = {
if(r.uri.startsWith("/foo") onBadRequest("go away")
else super.onRouteRequest(r)
}
当然不起作用,因为预期的返回类型是Option[play.api.mvc.Handler]
处理这个问题的惯用方法是什么,创建一个默认的应用程序控制器方法来处理过滤的错误请求?理想情况下,因为我知道onRouteRequest
/foo 实际上是 a BadRequest
,所以我想onBadRequest
直接打电话。
应该注意这是一个人为的例子,实际上是在验证 URI yyyyMMdd 日期参数,如果它没有解析到 JodaTime 实例,则验证 BadRequest-ing - 基本上是一个全面过滤器来清理给定的日期参数,而不是处理每个单个控制器方法调用,更不用说,避免使用无用的堆栈跟踪使应用程序日志混乱 re:无效的日期解析转换(由于用户无意义地操纵 uri 日期以尝试获取付费用户,因此每天都会累积数 MB 的这些垃圾跟踪条目内容)