0

我写了一个 REST 控制器,我想允许在控制器上删除 /rest/id,但不允许 /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 请求命中 /rest 时,我希望得到“方法不允许”/405,但我得到一个 404。我想也许请求被转换为 /rest/0,但它没有达到我放入的断点控制器的删除方法。

知道为什么它会以这种方式工作,或者我可以考虑解决问题的方法吗?

4

1 回答 1

0

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

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

该文档似乎希望您执行类似的操作

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

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

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

于 2013-01-26T02:50:22.937 回答