【问题标题】:Jackson not ignoring null values杰克逊没有忽略空值
【发布时间】:2014-11-08 22:01:10
【问题描述】:

这是我的对象

public class TokenTO {
    private String clientId;
    private String clientSecret;
    private String authCode;
    private String authToken;
    ....
}

当我收到JSON 回复时,我看到了

{"clientId":null,"clientSecret":null,"authCode":null,"authToken":"312301658396979836978200915715157679015:80bf41c2-bc97-492f-a65e-172bef9efb7c:922000000"} 

我的JacksonContextResolver 看起来像

public JacksonContextResolver() {
        objectMapper = new ObjectMapper()
                .setSerializationInclusion(JsonSerialize.Inclusion.ALWAYS);

        final AnnotationIntrospector annotationIntrospector = new JaxbAnnotationIntrospector();
        objectMapper
                .enable(DeserializationConfig.Feature.READ_ENUMS_USING_TO_STRING)
                .setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL)
                .setDeserializationConfig(objectMapper.getDeserializationConfig().withAnnotationIntrospector(annotationIntrospector))
                .setSerializationConfig(objectMapper.getSerializationConfig().withAnnotationIntrospector(annotationIntrospector));
    }  

我在How to tell Jackson to ignore a field during serialization if its value is null?jackson ignore empty values (or null) 中尝试了答案,但它们都不起作用。

我的maven 依赖项看起来像

 <properties>
     <jaxrs-api.version>3.0.8.Final</jaxrs-api.version>
     <maven-war-plugin.version>2.4</maven-war-plugin.version>
     <resteasy-jaxrs.version>3.0.9.Final</resteasy-jaxrs.version>
     <jackson.version>1.9.13</jackson.version>
    <jaxrs-api.version>3.0.8.Final</jaxrs-api.version>
 </properties>
 <dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>${jackson.version}</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>${jackson.version}</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-xc</artifactId>
    <version>${jackson.version}</version>
</dependency>

问题

如何去除JSON 中的null 值?

【问题讨论】:

  • org.codehaus.jackson? 2014 年?
  • 更好的建议请@fge
  • 你必须使用那个旧版本的 Jackson 吗? Jackson 1 的最后一次发布是在 1 1/2 年前。 ...我已经有 2 年没有使用它了。也许这是一个老错误。
  • 你为什么有JsonSerialize.Inclusion.ALWAYS

标签: java json maven jackson jax-rs


【解决方案1】:

由于我使用Java EE 7,所以我尝试使用JSON Processing

我所做的更改是

为了测试,我添加了

    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.json</artifactId>
        <version>1.0.4</version>
        <scope>test</scope>
    </dependency>

在源代码中,我创建了JSON

public JsonObject getAuthToken(@Nonnull final TokenManager tokenManager) {
        final String token = tokenManager.getAccessToken(clientId, clientSecret, authCode);
        return Json.createObjectBuilder().add("authToken", token).build();
    }

对于测试,我做了一些事情

final JsonObject jsonReply = getJsonObjectFromResponse(response);
assertNotNull(jsonReply.getString("authToken"));

    @Nonnull
    protected JsonObject getJsonObjectFromResponse(@Nonnull final Response response) {
        final JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class)));
        return jsonReader.readObject();
    }

现在,当部署时,我只看到我创建的内容

{"authToken":"165099393037221788471723459805657963846:8b0f2514-938f-4509-964f-ee073dbab4ed:238000000"} 

所以我完全使用Jackson,而且我的代码更加简洁

【讨论】:

    猜你喜欢
    • 2022-06-22
    • 2016-05-10
    • 2016-04-19
    • 2016-01-16
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2015-05-23
    相关资源
    最近更新 更多