さて、Springで「DELETE」HTTPリクエストを実行すると、奇妙な問題が発生します。
DELETEリクエストをマッピングしたコントローラーメソッドがあります。
_ @RequestMapping(value = "/{authorizationUrl}",method=DELETE)
public void deleteAuthorizationServer(
@RequestHeader(value="Authorization") String authorization,
@PathVariable("authorizationUrl") String authorizationUrl)
throws IOException {
System.out.println("TEST");
}
_
コントローラーは@RequestMapping("/authorization_servers");
を使用してマップされます。DEVHttpクライアントを介してリクエストを送信すると、レスポンスが返されます:_405 Http method DELETE is not supported by this URL
_。
リクエストは次のようになります。
_ DELETE localhost:8080/authorization_servers/asxas
Headers:
Authorization: "test:<stuff>"
_
誰かがこれを調べて私を助けてくれれば、私は感謝します
これは動作します:
@RequestMapping(value = "/{authorizationUrl}", method = DELETE)
public @ResponseBody void deleteAuthorizationServer(@RequestHeader(value="Authorization") String authorization,
@PathVariable("authorizationUrl") String authorizationUrl){
System.out.printf("Testing: You tried to delete %s using %s\n", authorizationUrl, authorization);
}
@ResponseBodyがありませんでした。あなたのメソッドは実際に呼び出されていました。その後、エラーコードが生成されました。
アノテーションは次のようになります。
@RequestMapping(value = "/{authorizationUrl}",method=RequestMethod.DELETE)
どこからDELETE変数を取得したのかわかりません。 :-)
@RequestMapping
パターンが一致しないか、invalidの場合、404が見つかりません。ただし、別のメソッド(GETなど)と別のマッピングが一致した場合、これは405 Http method DELETE is not supported
になります。
私の問題は、requestMappingが原因であったことを除いて、これと同じです。それはこれでした:
@RequestMapping(value = { "/thing/{id:\\d+" }, method = { RequestMethod.DELETE })
あなた見えますか?内部の閉じ中かっこがありません:{ "/thing/{id:\\d+}" }
\\d+
は、1つ以上の数字と一致する正規表現です。中括弧は、@PathVariable
で使用するためにパス内のパラメーターを区切ります。
これは無効なので、DELETEリクエストと一致できません: http://example.com/thing/33 これは404 not foundエラーを引き起こしていましたが、 GETの別のマッピング:
@RequestMapping(value = { "/thing/{id:\\d+}" }, method = { RequestMethod.GET })
ブレースパターンは正しいが、メソッドDELETEではないため、エラー405メソッドがサポートされていません。
これがあなたに役立つことを願っています!
また、"Content-Type" header="text/html"
で呼び出していることも確認してください。そうでない場合は、変更するか、requestMapping
で指定します。一致しない場合は、同じ405になります。
これが誰かを助けることを願っています。
(エンドポイントメソッドのパラメーターから)HttpServletResponse
にカスタム応答ステータスを設定する代わりに、(カスタム応答ステータスを使用して)ResponseEntity<Void>
を返す必要がありました。
例: http://shengwangi.blogspot.com/2016/02/response-for-get-post-put-delete-in-rest.html