spring Boot - " status":405,"错误":"方法不允许"

时间:2016-01-23 15:20:25

标签: java spring-boot

我使用the guide创建了一个简单的Spring Boot REST服务,当我发布到http://localhost:8080/greeting

时出现以下错误
  

- "状态":405,"错误":"方法不允许","例外":"组织。 springframework.web.HttpRequestMethodNotSupportedException"," message":"请求方法' POST'不支持",

我没有找到有关如何解决错误的任何信息。我正在使用版本1.3.2.RELEASE并使用mvn spring-boot:run启动Tomcat。

指南说默认允许所有HTTP方法。那么为什么它会回应不支持POST?

如何在POST到此URL时让Spring调用控制器方法?

1 个答案:

答案 0 :(得分:8)

Spring REST guide中所说,

  

@RequestMapping默认映射所有HTTP操作

但是,如果他们建议你添加了允许的http方法的规范:

  

@RequestMapping(method=GET)

然后只允许GET。邮件将被禁止。

如果你想同时允许GET和POST,但是不允许所有其他http methods,那么就这样注释你的控制器方法:

@RequestMapping(value = "/greeting", method = {RequestMethod.GET, RequestMethod.POST})
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
    return new Greeting(counter.incrementAndGet(),
                        String.format(template, name));
}

启动应用程序时,将注销所有请求处理程序映射。您应该在日志中(在IDE控制台或命令行窗口中)看到这样的行:

  

s.w.s.m.m.a.RequestMappingHandlerMapping:Mapped" {[/ greeting],methods = [GET || POST]}"公开招呼.Greeting hello.GreetingController.greeting(java.lang.String)

另外,你是如何发布的?我可以为Google Chrome推荐高级REST客户端。如果您要从浏览器中的表单发布,请尝试按f12并检查“网络”标签,检查您是否正在发布您认为自己正在发布的内容。

发布到错误的网址,例如http://localhost:8080/greetings代替http://localhost:8080/greeting会导致方法不允许错误,但实际上错误是网址中的拼写错误,而不是HTTP方法的选择。

要查看请求处理的更详细日志记录,请在 src / main / java 文件夹旁边创建 src / main / resources 文件夹,然后创建那里有application.properties 文件。将此行添加到该文件

logging.level.org.springframework.web=DEBUG

然后,如果您尝试POST到未映射的网址,例如/greetings代替/greeting,您会在日志中看到这些行:

  

RequestMappingHandlerMapping:查找路径/问候语的处理程序方法   RequestMappingHandlerMapping:找不到[/ greetings]

的处理程序方法