Spring boot:REST API 行为不一致后版本升级

Posted

技术标签:

【中文标题】Spring boot:REST API 行为不一致后版本升级【英文标题】:Spring boot : REST API behaviour inconsistent post version upgrade 【发布时间】:2021-11-15 21:17:28 【问题描述】:

从 1.5.10.RELEASE 升级到 Spring Boot 2.3.0.RELEASE 后出现问题。我们的控制器 API 看起来像 -

@RequestMapping(value = "/card", method = RequestMethod.GET)
public CardRespDTO getCards(@RequestParam String profileId, @RequestParam(required = false) String banner, @RequestParam(required = false) String paymentGatewayVersion);

消费者能够通过不传递 profileId 参数而只需提供一些 USER_ID 标头来调用此 API。但是发布版本升级后,这些调用失败并出现以下错误 -

org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'profileId' is not present

有人可以帮忙找出这里的问题吗?我们不能要求消费者做出改变。

【问题讨论】:

我猜你还需要为 profileId 设置 required=false,@RequestParam(required = false) String profileId。 谢谢@OnkarMusale 【参考方案1】:

profileId 标记为不需要就可以了:

@RequestMapping(value = "/card", method = RequestMethod.GET)
public CardRespDTO getCards(@RequestParam(required = false) String profileId, 
    @RequestParam(required = false) String banner, 
    @RequestParam(required = false) String paymentGatewayVersion)

【讨论】:

以上是关于Spring boot:REST API 行为不一致后版本升级的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot - 模拟对外部 API 的 POST REST 请求

Spring Boot Rest api 与 Spring Kafka

spring boot rest api测试得到404错误

在 Spring Boot REST API 中上传文件

java 使用Rest Assured和Spring Boot来休息Api文档

使用 Spring Boot 和 JWT 保护 REST Api