对于同一控制器上的不同URL,UrlMappings不返回405

时间:2013-01-25 23:56:56

标签: grails url-mapping

我编写了一个REST控制器,我想在控制器上为/ rest / id允许DELETE,而不是/ rest /。这是我的UrlMappings:

"/rest"(controller: "restController", parseRequest: true) {
  action = [GET: "list", POST: "save"]
}

"/rest/$id"(controller: "restController", parseRequest: true) {
  action = [GET: "show", PUT: "update", DELETE: "delete"]
}

当我的DELETE请求命中/休息时,我希望得到“方法不被允许”/ 405,但是我得到了404.我想也许请求被转换为/ rest / 0,但它没有达到断点我放入控制器的删除方法。

知道它为什么会这样运作,或者我可以看看解决问题的方法吗?

1 个答案:

答案 0 :(得分:0)

我认为这有点模棱两可,因为Grails从控制器的allowedMethods闭包中获得405s。

由于没有映射到DELETE for rest /,框架返回404,这似乎是正确的。

文档似乎要求您执行类似

的操作
delete(Long id) {
  if(!id){
    response.sendError 405
  } else {
    ...
  }
}

http://grails.org/doc/latest/ref/Controllers/allowedMethods.html

如果您认为这种行为不正确,可能值得提高JIRA。从grails-core中的测试来看,它似乎根本不涉及405s。