简单记录一下springdoc2.5.0整合springboot3.2.5报错
整合完成后出现如下错误信息:
Please indicate a valid Swagger or OpenAPI version field. Supported version fields are swagger: "2.0" and those that match openapi: 3.x.y (for example, openapi: 3.1.0).
简单说明该错误形成的原因,由于配置了MappingJackson2HttpMessageConverter,导致所有的请求都走了该自定义的objectmapper,从而破坏了OpenAPI JSON。我的错误原因是在继承了
WebMvcConfigurer的配置中重写了extendMessageConverters方法,代码如下:
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter messageConverter =
new MappingJackson2HttpMessageConverter();
JacksonObjectMapper jacksonObjectMapper = new JacksonObjectMapper();
jacksonObjectMapper.setTimeZone(TimeZone.getDefault());
messageConverter.setObjectMapper(jacksonObjectMapper);
converters.add(0, messageConverter);
把自定义的objectmapper注入到了第一位,从而导致了所有的请求都会使用该自定义的objectmapper,从而导致springdoc出现该错误,我搜索了网上基本没啥说明白的,特此简单记录一下:
-
自定义的 ObjectMapper 放到 MVC 消息转换器里最前面(converters.add(0, messageConverter))。
-
SpringDoc 查找
MappingJackson2HttpMessageConverter时,拿到的就是你注入的 ObjectMapper。 -
因此
/v3/api-docs输出也就使用了你自定义的配置。
解决办法如下:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.t3rik.framework.config.json.JacksonObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import java.util.TimeZone;
@Configuration
public class JacksonConfig {
@Bean
@Primary // 让 Spring 注入时优先使用这个 ObjectMapper
public ObjectMapper objectMapper() {
// 你自己的 JacksonObjectMapper(继承 ObjectMapper)
JacksonObjectMapper objectMapper = new JacksonObjectMapper();
// 设置时区(可选)
objectMapper.setTimeZone(TimeZone.getDefault());
return objectMapper;
}
}
简单做下说明,为什么不会影响 Springdoc
-
新方案中我们配置了全局 Jackson(自定义
@Primary ObjectMapper) -
Springdoc 生成
/v3/api-docs时 不会使用 Spring MVC 的 HttpMessageConverter -
它通过自己的
ObjectMapperProvider获取ObjectMapper,序列化 OpenAPI 对象 -
因此我们对全局 ObjectMapper 的配置(日期格式、Long -> String 等)不会影响 OpenAPI 文档,也就避免了 swagger-ui 报错的问题
-
至此问题完美解决,撒花
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)