daydreamer
daydreamer

Reputation: 92179

Jackson not ignoring null values

Here is my object

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

and when I get the JSON response I see

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

My JacksonContextResolver looks like

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));
    }  

I tried answers in How to tell Jackson to ignore a field during serialization if its value is null? and jackson ignore empty values (or null) but none of them work.

My maven dependencies look like

 <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>

Question

How do I get rid of null values in JSON?

Upvotes: 1

Views: 1407

Answers (1)

daydreamer
daydreamer

Reputation: 92179

Since I am using Java EE 7, I tried to make use of JSON Processing.

The changes I made is

for testing, I added

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

and in source code, I created JSON as

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

and for Testing, I did something as

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

and

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

Now, when deployed, I only see what I create

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

So I am not using Jackson at all and my code is lot more cleaner

Upvotes: 1

Related Questions