1

我正在使用 Play 框架(Scala 变体)版本 2.1.1 编写 RESTful Web 服务。

对于给定的资源,我希望能够处理 POST 请求,但对于任何其他方法,我希望返回 MethodNotAllowed 响应。

我的路线文件尝试(片段):

# Item-related actions
POST    /item   controllers.ItemController.newItem
GET     /item   controllers.ApplicationController.methodNotAllowed
PUT     /item   controllers.ApplicationController.methodNotAllowed
DELETE  /item   controllers.ApplicationController.methodNotAllowed
HEAD    /item   controllers.ApplicationController.methodNotAllowed
OPTIONS /item   controllers.ApplicationController.methodNotAllowed
PATCH   /item   controllers.ApplicationController.methodNotAllowed

但我在 Play 控制台中收到警告:

[warn] /home/bruno/Entwicklung/pServer/conf/routes:8: unreachable code
[warn] PUT    /itemcontrollers.ApplicationController.methodNotAllowed

为什么几个不同的路由会呈现一些“无法访问的代码”?我知道反向解析机制应该有一套明确的规则,以便在没有歧义的情况下运行,但是我现在感兴趣的直接机制应该是开箱即用的。或不?

因为从我的角度来看,这种情况在编写 REST 服务时一定很常见,所以我确定我在这里遗漏了一些重要的东西。

如果您对解决此问题的最佳方法有任何建议,我将不胜感激。

4

1 回答 1

2

您不应该试图找出所有可能的不良接入点来生成错误消息。相反,您可以覆盖onHandlerNotFound应用程序Global对象中的方法。

改编自 Play 官方文档:ScalaGlobal

import play.api._
import play.api.mvc._
import play.api.mvc.Results.__

object Global extends GlobalSettings {
  override def onHandlerNotFound(request: RequestHeader): Result = {
    // implement methodNotAllowed controller Action
  }  
}
于 2013-07-12T00:00:01.810 回答