如何为Play 2.1(Scala)中的任何http方法定义默认Action?

时间:2013-07-11 19:02:39

标签: http scala playframework playframework-2.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服务时必须相当普遍,我确信我在这里缺少一些重要的东西。

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

1 个答案:

答案 0 :(得分: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
  }  
}