使用上下文路径的 POST 调用在 Spring Boot 2.x 中不起作用

Posted

技术标签:

【中文标题】使用上下文路径的 POST 调用在 Spring Boot 2.x 中不起作用【英文标题】:POST call using context-path not working in spring boot 2.x 【发布时间】:2021-02-17 03:14:39 【问题描述】:

我正在将我的 Spring Boot 应用程序从 1.5.x 迁移到 2.x 我在没有尾随的情况下对上下文路径进行 POST 调用时收到 405 错误 /


    "timestamp": "2020-11-04T12:07:19.065+0000",
    "status": 405,
    "error": "Method Not Allowed",
    "message": "Request method 'GET' not supported",
    "path": "/hello/"

下面是我的代码

application.properties:

spring:
  application:
    name: hello-world-service
server:
  servlet:
    context-path: /hello
  port: 8082

HelloWorldController.java

@RestController
@RequestMapping(value = "/")
public class HelloWorldController 
    
    @PostMapping
    public ResponseEntity<String> helloWorld(@RequestBody HelloDto helloDto)
        return ResponseEntity.ok(helloDto.getName());
    

HelloDto.java

@Data
public class HelloDto 
    private String name;

春季开机版本:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.11.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

当我在 http://localhost:8082/test 上进行 POST 调用时,我得到的 405 状态是下面的截图

但是当我在 http://localhost:8082/test/ 上进行 POST 调用时,它工作正常。下面是截图

有什么方法可以处理我们调用localhost:8082/test 会得到与调用localhost:8082/test/ 相同的结果

【问题讨论】:

可能是http://localhost:8082/hello/ 而不是http://localhost:8082/test/ 是的,我的问题已解决,请在下方查看我的回答 【参考方案1】:

您没有端点/hello,而是/hello//hello 是主路径/根路径,因此您的端点是为 /hello/ 指定的:

@RequestMapping(value = "/")

【讨论】:

如果我删除了@RequestMapping(value = "/") 那么也是同样的行为,是的 url 是 /hello 我写错了 /test 这就是 url 在 Spring Boot 中的工作方式。 /hello 是默认路径,/hello/ 是您的端点。如果要为/hello 指定端点,则需要删除context-path: /hello 或将值更改为/ 并将/hello 设置为@RequestMapping 中的值。【参考方案2】:

在我在 application.yml 中添加以下属性后,它对我有用

server:
  tomcat:
    redirect-context-root: false

【讨论】:

以上是关于使用上下文路径的 POST 调用在 Spring Boot 2.x 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 应用程序中添加两个上下文路径

如何在 Spring Boot Tests 中设置 servlet 上下文路径?

Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅。。

加载类路径中 jar 内的 spring 应用程序上下文文件

Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅!

Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅。。