0

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リクエストが/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でのテストから、405をまったく処理していないようです。

于 2013-01-26T02:50:22.937 に答える