我正在使用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服务时必须相当普遍,我确信我在这里缺少一些重要的东西。
如果您对解决此问题的最佳方法有任何建议,我将不胜感激。
答案 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
}
}