spring-boot3.3.0 整合springdoc-openapi2.x问题


在这里插入图片描述

背景

接手了一个项目,在原基础上继续开发,好多东西不方便动。
环境:jdk17、maven3.9.6、spring.cloud2023.0.2、spring-boot3.3.0、springdoc-openapi2.x、…

先是用的这个
spring-boot3.3.0 + springdoc-openapi2.3.0

<dependency>
    <groupId>org.springdoc</groupId>
      <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
      <version>2.3.0</version>
  </dependency>

后面又改成这个
spring-boot3.3.0 + knife4j4.5.0

<dependency>
    <groupId>com.github.xiaoymin</groupId>
     <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
     <version>4.5.0</version>
 </dependency>

问题原因

我出现的原因

新版本的返回值改成了byte[],之前是String类型的,然后返回给前端时把byte[]序列化成了一个base64的字符串,导致前端无法处理。
在这里插入图片描述
在这里插入图片描述
前端请求得到的响应结果:
在这里插入图片描述

在这里插入图片描述
base64字符串解码后的结果如下:
在这里插入图片描述

网上搜集到的原因

1. controller里面的方法名有重复的:然后我在代码里面搜了一下,还真有不少重复的,但是我把重复的名字改了后还是不行。
2. controller里面有私有方法:我的代码里面没有,我未验证。
3. openapi的请求路径被拦截:放行对应路径即可,我的代码里面没有,我未验证。
4. 其他...

解决方法

方法1. 单独处理返回值

在数据返回前将数据处理一下,把byte[] 转化为String类型;但是在我的系统里面String直接返回给前端时,序列化会加上转义字符,如下面这样
在这里插入图片描述
导致前端还是无法处理,所以我这里把字符串再次转换成了一个JsonObject对象直接返回给前端。
整个处理就只加了下面这个类。
在这里插入图片描述
这是修改后正常返回的数据:在这里插入图片描述

方法2. 修改序列化器

问题出现的原因是因为序列化时把byte[]序列化成了base64的字符串,可以直接修改序列化器,这个方式较简单,但因为我的系统里面不太方便做这个操作,所以没有采用这种方式。
注意用这种方式是否会对原业务响应产生影响。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值