首页 > 解决方案 > 杰克逊以 FAIL_ON_UNKNOWN_PROPERTIES 失败

问题描述

使用 Jackson Json 提供程序从 Jersey Client 2.22 迁移到 2.27,Jackson 在未知属性上失败,即使配置正确;

    final JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider()
            .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    Client client = ClientBuilder.newClient().register(jacksonJsonProvider);

...

    javax.ws.rs.core.Response r = requestBuiler.post(Entity.form(formData));
    return r.readEntity(AccessTokenResponse.class);

如果对象中不存在某些字段,则响应反序列化崩溃/查看堆栈跟踪。

我不想在我的对象中添加任何注释。这在以前的版本中是不必要的。

堆栈跟踪

引起:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“mobileNo”(类 ch.abraxas.oauth.egovsec.EGovUser),未标记为可忽略(20 个已知属性:“needsApproval”,“lastname”, “authType”、“accountNonExpired”、“externalId”、“identifier”、“accountNonLocked”、“otherRoles”、“cariId”、“credentialsNonExpired”、“username”、“language”、“organisations”、“contextName”、“firstname” ", "email", "authorities", "country", "landlineNo", "enabled"]) 在 [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); 行:1,列:

pom.xml

       <javaee.version>8.0</javaee.version>
       <jersey.version>2.27</jersey.version>
       <jackson.version>2.9.4</jackson.version>

       <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <scope>provided</scope>
    </dependency>

        <!-- Jersey stack -->
        <dependency>
            <groupId>org.glassfish.jersey</groupId>
            <artifactId>jersey-bom</artifactId>
            <version>${jersey.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
            <version>${jersey.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-jaxb-annotations</artifactId>
            <version>${jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>${jackson.version}</version>
    </dependency>

添加缺少的属性时,它可以正常工作。但这应该支持缺少的属性。

谢谢您的帮助 !

标签: jacksonjersey

解决方案


推荐阅读