【问题标题】:Springboot Request method 'POST' not supported不支持 Springboot 请求方法“POST”
【发布时间】: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 它说404api/users/405
  • 贴出你切断的整个日志消息。
  • @berserkk Spring MVC 会将尾部斜杠映射到基本 API 上,默认情况下不使用斜杠。
  • 我可以在 stackoverflow 中看到相同的问题,但没有正确回答/解决。最后通过使用 mvn cammand 运行项目解决了这个问题。发布答案供其他人参考。

标签: java spring spring-mvc spring-boot spring-data


【解决方案1】:

最后通过使用maven命令运行项目解决了问题。

不是使用IDE的运行按钮运行项目,而是在IDE中进入终端并执行命令

mvn spring-boot:run

因为它是一个REST 实现,现在我可以访问这些了,

GET /api/users/ or /api/users
POST /api/users/ or /api/users

像魅力一样工作!

【讨论】:

  • 听起来您运行的是过时的代码副本。
  • @chrylis 不,我确定这是 IDE 运行的问题(IntelliJ Idea)。多次使用运行按钮执行代码但没有成功。使用 maven 命令运行后完美运行。
  • 你使用 Maven 运行后,它是否开始在 IDE 中工作?
  • @chrylis 如果我使用 IDE 运行按钮运行,它仍然不会在浏览器中刷新。所以我现在只做命令。
猜你喜欢
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2020-10-29
  • 2016-05-02
相关资源
最近更新 更多