Reputation: 92179
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
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