升级Jackson版本后访问Swagger UI出现500初始化异常
问题解决方案
核心原因
Swagger 1.5.16与Jackson 2.13.x版本存在兼容性冲突:Apache CXF的JaxRs2Extension类通过ServiceLoader实例化时,依赖的Jackson旧API在2.13.x中已变更或移除,导致实例化失败,进而触发Spring Bean创建异常。
解决办法
- 升级Apache CXF版本:Swagger 1.5.16搭配的CXF版本通常不支持Jackson 2.13.x,建议将CXF升级到3.5.x及以上版本(该系列开始兼容Jackson 2.12+),确保
JaxRs2Extension能适配新版Jackson的API。 - 排除CXF中的Jackson依赖:若暂时无法升级CXF,可在CXF相关依赖中排除旧的Jackson模块,强制使用项目中的2.13.x版本。以Maven为例:
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-swagger</artifactId> <version>当前使用的CXF版本</version> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </exclusion> </exclusions> </dependency>
- 降级Jackson版本:如果上述方案都无法实施,可暂时将Jackson降级到与Swagger 1.5.16兼容的版本,比如2.11.x系列(该版本既满足兼容性,也修复了部分安全漏洞)。
- 手动注册SwaggerExtension Bean:绕过ServiceLoader的自动加载机制,手动创建
JaxRs2Extension并注册为Spring Bean:
@Bean public SwaggerExtension jaxRs2Extension() { return new org.apache.cxf.jaxrs.swagger.JaxRs2Extension(); }
注意:此方法仅适用于JaxRs2Extension的构造逻辑未依赖已移除的Jackson API的情况,若仍存在API缺失,还是需要升级CXF。
内容的提问来源于stack exchange,提问作者Ashwini Bedwal
相关产品推荐
相关产品推荐

