如何配置OpenAPI Generator生成的Java客户端忽略未知属性?
我通过Gradle插件使用OpenAPI Generator从Swagger规范生成Java客户端,服务器更新后,客户端抛出未知属性错误:
JSON字符串中的
additionalProperties字段未在Document属性中定义
排查发现错误来自okhttp-gson/pojo.mustache模板的validateJsonElement方法,该方法被{{^isAdditionalPropertiesTrue}}标签包裹,需要关闭此验证(即设置isAdditionalPropertiesTrue=true),但不清楚如何在Gradle配置中实现。
我的Gradle构建配置如下:
group = "swagger_generation" generatorName = "java" id = "client-generated" inputSpec = "$projectDir/swagger_${swagFile}.json".toString() outputDir = "$rootDir/client-generated-${swagFile}".toString() apiPackage = "ie.client${swagSpec}" invokerPackage = "ie.client${swagSpec}" modelPackage = "ie.client.model${swagSpec}" configOptions = [ openApiNullable: "false", ]
补充说明:生成的JSON类使用Gson解析,原本默认应跳过未知属性,但生成的validateJsonElement方法会强制抛出错误。
解决方案
在Gradle配置的configOptions中添加additionalProperties: "true"即可关闭未知属性验证,修改后的配置如下:
group = "swagger_generation" generatorName = "java" id = "client-generated" inputSpec = "$projectDir/swagger_${swagFile}.json".toString() outputDir = "$rootDir/client-generated-${swagFile}".toString() apiPackage = "ie.client${swagSpec}" invokerPackage = "ie.client${swagSpec}" modelPackage = "ie.client.model${swagSpec}" configOptions = [ openApiNullable: "false", additionalProperties: "true" // 新增配置项 ]
原理
OpenAPI Generator的Java(okhttp-gson)模板中,{{^isAdditionalPropertiesTrue}}是反向逻辑标签——当isAdditionalPropertiesTrue为false时,才会启用validateJsonElement里的未知属性检查。通过设置additionalProperties: "true",生成器会将isAdditionalPropertiesTrue设为true,从而跳过该验证逻辑,与Gson默认的跳过未知属性行为匹配。
内容的提问来源于stack exchange,提问作者Alessandro Carraro

