【发布时间】:2017-11-12 13:40:48
【问题描述】:
我刚刚开始学习用于 REST API 开发的 Java Spring Boot。使用下面的代码,GET 方法可以正常工作,但 POST 不能。
@RestController
@RequestMapping("/api/users")
public class UsersController {
@Autowired
private UserRepository userRepository;
@RequestMapping(method = RequestMethod.GET)
public List<User> getAll() {
return userRepository.findAll();
}
@RequestMapping(method = RequestMethod.POST)
public String saveUser() {
return "Saved";
}
}
在 Postman 应用中使用 Content-Type 作为 application/json 测试 POST 方法
错误,
{
"timestamp": 1497116929266,
"status": 405,
"error": "Method Not Allowed",
"exception": "org.springframework.web.HttpRequestMethodNotSupportedException",
"message": "Request method 'POST' not supported",
"path": "/api/users/"
}
在我可以看到的日志中,
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/users],methods=[POST]}" onto public java.lang.String com.betasquirrel.controller.UsersController.saveUser()
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/api/users],methods=[GET]}" onto public java.util.List<com.betasquirrel.model.User> com.betasquirrel.controller.UsersController.getAll()
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
maven 的 Java 和 springboot 版本,
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
【问题讨论】:
-
您的错误显示带有字段
path和值/api/users/的json。也许路径末尾的斜线很重要? -
@berserkk 尝试访问
api/users它说404,api/users/说405 -
贴出你切断的整个日志消息。
-
@berserkk Spring MVC 会将尾部斜杠映射到基本 API 上,默认情况下不使用斜杠。
-
我可以在 stackoverflow 中看到相同的问题,但没有正确回答/解决。最后通过使用 mvn cammand 运行项目解决了这个问题。发布答案供其他人参考。
标签: java spring spring-mvc spring-boot spring-data