移除jersey2后OpenAPI生成类无法忽略JSON未知字段问题
执行GET请求拿到JSON响应后,反序列化时抛出异常,提示JSON里的form_object_guid字段在自动生成的DigitalFormGetResponse类中不存在。
这个DigitalFormGetResponse类是用openapi-generator-maven-plugin 6.6.0生成的,我已经给插件加了<additionalModelTypeAnnotations>@com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true)</additionalModelTypeAnnotations>配置,生成的类也确实带了这个注解:
@com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true) public class DigitalFormGetResponse {
但反序列化异常还是没解决。之前用jersey2库的时候,未知字段能正常被忽略,但jersey2不支持Java16+的PATH请求,我不得不把它移除,之后就出了这个问题。
当前POM里的插件配置如下:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>6.6.0</version> <executions> <execution> <id>spring-boot-api</id> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>${project.basedir}/digitalformsords.yaml</inputSpec> <generatorName>java</generatorName> <configOptions> <dateLibrary>joda</dateLibrary> <validateSpec>false</validateSpec> <useSpringBoot3>true</useSpringBoot3> <useJakartaEe>true</useJakartaEe> <additionalModelTypeAnnotations>@com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true)</additionalModelTypeAnnotations> </configOptions> <library>jersey2</library> <apiPackage>${default-package}.api</apiPackage> <modelPackage>${default-package}.api.model</modelPackage> <invokerPackage>${default-package}.api.handler</invokerPackage> <generateModelTests>false</generateModelTests> <generateApiTests>false</generateApiTests> </configuration> </execution> </executions> </plugin>
修正OpenAPI Generator的库配置
你的POM里还留着<library>jersey2</library>,虽然移除了jersey2依赖,但这个配置会让生成器按jersey2的逻辑生成代码,和当前Spring Boot 3环境不兼容。把这个配置改成:<library>spring-boot</library>同时彻底清理项目中所有jersey2相关的依赖,避免冲突。
全局配置Jackson忽略未知字段
如果类级别的注解不生效,直接在Spring Boot里全局配置Jackson,强制忽略未知字段:- 添加配置类:
@Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { return new ObjectMapper() .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); } }
或者在
application.yml里加:spring: jackson: deserialization: fail-on-unknown-properties: false- 添加配置类:
升级OpenAPI Generator版本
6.6.0版本对Spring Boot 3和Java 16+的支持可能存在瑕疵,建议升级到7.x系列的稳定版本,新版本的兼容性更好,大概率能解决注解不生效的问题。确认序列化库的实际使用
检查项目中是否引入了其他序列化库(比如Gson),如果有,可能会覆盖Jackson的配置,导致JsonIgnoreProperties注解失效。确保项目中只有Jackson作为JSON处理库。
内容的提问来源于stack exchange,提问作者jianmin tu

