Site icon

Override JsonInclude properties – ObjectMapper ContextResolver (Jersey)

Program –  JsonInclude properties ObjectMapper ContextResolver

EmployeeModel Class has annotation @JsonInclude(JsonInclude.Include. NON_NULL)

package org.learn;

import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class EmployeeModel {

	public String firstName;
	public String lastName;
	public int age;
	public List vehicleList;

	public EmployeeModel() {
		vehicleList = new ArrayList<>();
	}

	public EmployeeModel(String firstName, String lastName, int age, List vehicleList) {
		this.firstName = firstName;
		this.lastName = lastName;
		this.age = age;
		this.vehicleList = vehicleList;
	}
}

default JSON serialization of employee model object

{
firstName: "Random First Name 91cf",
lastName: "Random Last Name 9114",
age: 35,
vehicleList: [ ]
}

We can see the empty vehicleList is getting serialized, We can avoid empty list serialization by overriding the behavior of @JsonInclude annotation using ObjectMapper (in ContextResolver).

package org.learn;

import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

@Provider
public class ObjectMapperContextResolver implements ContextResolver {

    private final ObjectMapper objectMapper = new ObjectMapper();

    public ObjectMapperContextResolver() {
    	objectMapper.configure(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS,false);
    }

    @Override
    public ObjectMapper getContext(Class<?> type) { return objectMapper; }

}

Output – JsonInclude properties ObjectMapper ContextResolver

The after configuring Serialization feature, the JSON serialization of above model object will be.

{
firstName: "Random First Name 1472",
lastName: "Random Last Name 9911",
age: 36
}
Exit mobile version