IBM ODM 8.11升级后Swagger无法生成自定义变量描述问题
问题原因
这是ODM 8.11版本OpenAPI生成逻辑调整导致的兼容问题,不属于代码编写错误。
ODM 8.10版本生成HTDS对应的OpenAPI描述文件时,底层基于Jackson 2.10.x序列化模块实现,原生支持扫描@JsonPropertyDescription注解提取字段描述、默认值信息。8.11版本升级过程中,IBM将HTDS OpenAPI生成的底层实现切换为适配Jakarta EE 9的自研封装Swagger Core 2.2.x模块,该模块默认仅扫描Swagger原生注解,未做Jackson注解的兼容适配,因此自定义类上的@JsonPropertyDescription不会被识别,只有DecisionId、Error这类内置硬编码描述的对象能正常带出说明信息。
解决方法
根据项目情况二选一即可:
- 不修改现有代码注解:找到ODM 8.11安装目录下的
res/htds/lib路径,将和你项目版本匹配的jackson-databind、jackson-annotationsjar包放入该目录,重启ODM服务后,OpenAPI生成模块会自动加载Jackson注解扫描扩展,原有@JsonPropertyDescription注解即可恢复生效,字段默认值也能正常读取。注意引入的Jackson版本选择2.13.x及以上稳定版即可,不要和ODM 8.11自带的Jackson大版本产生冲突。 - 适配官方原生支持的注解:直接将字段上的
@JsonPropertyDescription替换为Swagger原生@Schema注解,这是ODM 8.11及后续版本官方明确兼容的写法,字段描述、默认值、示例值、必填标记等配置都能正常同步到生成的OpenAPI文件中,后续跨版本升级也不会出现兼容问题,示例代码如下:
import io.swagger.v3.oas.annotations.media.Schema; @Schema(description = "Description here", defaultValue = "default id value") private String id;
注意:如果是决策中心部署的规则项目,修改注解或替换jar包后需要执行一次项目全量编译,清空旧的类元数据缓存后再触发HTDS描述文件生成,否则会出现注解不生效的问题。
内容的提问来源于stack exchange,提问作者budikpet
相关产品推荐
相关产品推荐

