使用上下文路径的 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 应用程序上下文文件