web-dev-qa-db-ja.com

Spring-405 HttpメソッドDELETEはこのURLではサポートされていません

さて、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>"
_

誰かがこれを調べて私を助けてくれれば、私は感謝します

14

これは動作します:

@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がありませんでした。あなたのメソッドは実際に呼び出されていました。その後、エラーコードが生成されました。

14
Rob Worsnop

アノテーションは次のようになります。

@RequestMapping(value = "/{authorizationUrl}",method=RequestMethod.DELETE)

どこからDELETE変数を取得したのかわかりません。 :-)

4
jgitter

@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メソッドがサポートされていません。

これがあなたに役立つことを願っています!

2
David Lotts

また、"Content-Type" header="text/html"で呼び出していることも確認してください。そうでない場合は、変更するか、requestMappingで指定します。一致しない場合は、同じ405になります。

これが誰かを助けることを願っています。

0
Jason

(エンドポイントメソッドのパラメーターから)HttpServletResponseにカスタム応答ステータスを設定する代わりに、(カスタム応答ステータスを使用して)ResponseEntity<Void>を返す必要がありました。

例: http://shengwangi.blogspot.com/2016/02/response-for-get-post-put-delete-in-rest.html

0
cellepo