我使用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调用控制器方法?
答案 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]
的处理程序方法