You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除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>
解决方法
  1. 修正OpenAPI Generator的库配置
    你的POM里还留着<library>jersey2</library>,虽然移除了jersey2依赖,但这个配置会让生成器按jersey2的逻辑生成代码,和当前Spring Boot 3环境不兼容。把这个配置改成:

    <library>spring-boot</library>
    

    同时彻底清理项目中所有jersey2相关的依赖,避免冲突。

  2. 全局配置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
    
  3. 升级OpenAPI Generator版本
    6.6.0版本对Spring Boot 3和Java 16+的支持可能存在瑕疵,建议升级到7.x系列的稳定版本,新版本的兼容性更好,大概率能解决注解不生效的问题。

  4. 确认序列化库的实际使用
    检查项目中是否引入了其他序列化库(比如Gson),如果有,可能会覆盖Jackson的配置,导致JsonIgnoreProperties注解失效。确保项目中只有Jackson作为JSON处理库。

内容的提问来源于stack exchange,提问作者jianmin tu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:19:59