java - Spring 启动 -"status":405 ,"error" :"Method Not Allowed"

标签 java spring-boot

<分区>

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

时出现以下错误

-"status":405,"error":"Method Not Allowed","exception":"org.springframework.web.HttpRequestMethodNotSupportedException","message":"Request method 'POST' not supported",

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

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

当我 POST 到这个 URL 时,如何让 Spring 调用 Controller 方法?

最佳答案

正如它在 Spring REST guide 中所说的那样,

@RequestMapping maps all HTTP operations by default

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

@RequestMapping(method=GET)

那么只允许 GET。 POST 将被禁止。

如果您想同时允许 GET 和 POST,但不允许所有其他 http methods ,然后这样注释您的 Controller 方法:

@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]}" onto public hello.Greeting hello.GreetingController.greeting(java.lang.String)

此外,您是如何发帖的?我可以为 Google Chrome 推荐 Advanced REST client。如果您通过浏览器中的表单发帖,请尝试按 f12 并检查“网络”选项卡以检查您发帖的内容是否与您认为的内容完全一致。

发布到错误的 URL,例如http://localhost:8080/greetings 而不是 http://localhost:8080/greeting 将导致 Method Not Allowed 错误,尽管实际上错误是 URL 中的拼写错误,而不是 HTTP 方法的选择。

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

logging.level.org.springframework.web=DEBUG

然后,如果您尝试 POST 到一个未映射的 URL,例如/greetings 而不是 /greeting,您将在日志中看到这些行:

RequestMappingHandlerMapping : Looking up handler method for path /greetings RequestMappingHandlerMapping : Did not find handler method for [/greetings]

关于java - Spring 启动 -"status":405 ,"error" :"Method Not Allowed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34965192/

相关文章:

java - 考虑在配置中定义一个名为 'entityManagerFactory' 的 bean - Spring boot

spring-boot - 使用多个主类运行 spring boot

java - 如何管理跨多个项目的共享引导数据

Java 8 矩阵 * vector 乘法

Java Socket 编程和流

java - 如何防止父类(super class)调用重写的子类方法?

Spring Boot Controller - 枚举参数作为值

spring-boot - 使用 spring-JMS 和 spring cloud sleuth 时的 BeanNotOfRequiredTypeException

java - Spring Boot 本地化问题 - Accept-Language header

java - 如何在 tomcat 容器中安装 servlet 并将其加载到每个 Web 应用程序的上下文中?