Spring - 405此URL不支持Http方法DELETE

时间:2014-04-28 19:46:12

标签: java spring spring-mvc http-status-code-405 http-delete

我在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");映射控制器 当我通过DEV Http客户端发送请求时,我收到了回复:405 Http method DELETE is not supported by this URL

请求如下所示:

 DELETE    localhost:8080/authorization_servers/asxas

  Headers:
  Authorization: "test:<stuff>"

如果有人可以调查并帮助我,我将不胜感激

5 个答案:

答案 0 :(得分:13)

这将有效:

@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。你的方法实际上被调用了;之后发生了错误代码。

答案 1 :(得分:2)

您的注释应如下所示:

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

我不知道你从哪里得到DELETE变量。 : - )

答案 2 :(得分:1)

如果@RequestMapping模式不匹配或无效,则会导致找不到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请求匹配:\ n     http://example.com/thing/33 这会导致404找不到错误,但是,我有另一个GET映射:

@RequestMapping(value = { "/thing/{id:\\d+}" }, method = { RequestMethod.GET })

由于大括号模式是正确的,但它不是DELETE方法,因此它不支持错误405方法。

希望这能帮到你!

答案 3 :(得分:0)

还要确保您使用"Content-Type" header="text/html"进行调用。如果没有,则更改它或在requestMapping中指定它。如果它不匹配,你得到相同的405.

希望这有助于某人。

答案 4 :(得分:0)

我需要返回ResponseEntity<Void>(具有自定义响应状态),而不是在HttpServletResponse上设置自定义响应状态(来自端点方法参数)。

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