GET 映射有效,但 POST、PUT 和 DELETE 的状态为 405(在 spring-boot Restful api 中)

GET mapping works but POST, PUT and DELETE have status 405 (in spring-boot Restful api)

我使用 Intellij idea 并创建了一个 spring-boot 项目。我的问题是请求方法,当我使用 GET 方法时,它可以工作,但是 POST、PUT 和 DELETE 方法会抛出该死的 Whitelabel 错误页面!! 错误内容为:

"There was an unexpected error (type=Method Not Allowed, status=405). Request method 'GET' not supported"

@RestController
@RequestMapping("/")
public class CustomerInquiryController {

    @GetMapping("/get")
    public String getMessage(){
        return "msg is fetched!";
    }

    @PostMapping("/post")
    public String addMessage(){
        return "msg is added!";
    }

    @PutMapping("/put")
    public String editMessage(){
        return "msg is edited!";
    }

    @DeleteMapping("/del")
    public String deleteMessage(){
        return "msg is deleted!";
    }
}

HTML 表单支持 GET 和 POST。 HTML5 个在某一时刻添加了 PUT/DELETE,但那些被删除了。

您的浏览器仅发出 GET 请求(如果通过表单,则发出 POST 请求),您无法从浏览器测试其他请求方法。使用 postmancurlwget 或类似工具访问这些端点。

在命令行中尝试 curl -X POST http://<YOUR_HOST>:<PORT>/post。如果这个 returns msg is added! 你的 POST 正在工作。尝试使用替代工具或表单 post 然后 post 数据。

在 运行 命令之前用您正在使用的主机名或 ip 和端口号替换。

它根据 cardouken 的评论将 "method = {RequestMethod.GET, RequestMethod.POST}" 添加到 class 注释。早些时候,我在我的方法之前使用了这个注释,但它没有用。这很奇怪。

嗯,实际上,你甚至不需要 @RequestMapping("/")

这会完成工作:

@RestController
public class CustomerInquiryController {

    @GetMapping("/get")
    public String getMessage(){
        return "msg is fetched!";
    }

    @PostMapping("/post")
    public String addMessage(){
        return "msg is added!";
    }

    // .. other mappings..
}