How do you globally set Jackson to ignore unknown properties within Spring? How do you globally set Jackson to ignore unknown properties within Spring? xml xml

How do you globally set Jackson to ignore unknown properties within Spring?


For jackson 1.9x or below you can ignore unknown properties with object mapper provider

@Provider@Componentpublic class JerseyObjectMapperProvider implements ContextResolver<ObjectMapper> {    @Override    public ObjectMapper getContext(Class<?> type) {        ObjectMapper result = new ObjectMapper();        result.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);        return result;    }}

For jackson 2.x and above you can ignore unknown properties with object mapper provider

@Provider@Componentpublic class JerseyObjectMapperProvider implements ContextResolver<ObjectMapper> {    @Override    public ObjectMapper getContext(Class<?> type) {        ObjectMapper result = new ObjectMapper();        result.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);        return result;    }}

Jersey classes are not auto-discovered by Spring. Have to register them manually.

public class JerseyConfig extends ResourceConfig {    public JerseyConfig() {        register(JerseyObjectMapperProvider.class);    }}


This can be achieved using spring's MethodInvokingFactoryBean:

<!-- Jackson Mapper --><bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" /><bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">    <property name="targetObject" ref="jacksonObjectMapper" />    <property name="targetMethod" value="configure" />    <property name="arguments">        <list>            <value type="org.codehaus.jackson.map.DeserializationConfig.Feature">FAIL_ON_UNKNOWN_PROPERTIES</value>            <value>false</value>        </list>    </property></bean>

This can be wired to a RestTemplate like this:

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">    <property name="messageConverters">        <list>            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">                <property name="objectMapper" ref="jacksonObjectMapper" />            </bean>        </list>    </property></bean>

It can also be injected directly into the message converters for use with Spring MVC:

<mvc:annotation-driven>    <mvc:message-converters>        <!-- Jackson converter for HTTP messages -->        <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">            <property name="objectMapper" ref="jacksonObjectMapper" />        </bean>    </mvc:message-converters></mvc:annotation-driven>


For newer Jackson versions (2.x) there are a few changes:

<!-- Jackson Mapper --><bean id="jacksonObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper" /><bean    class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">    <property name="targetObject" ref="jacksonObjectMapper" />    <property name="targetMethod" value="configure" />    <property name="arguments">        <list>            <value type="com.fasterxml.jackson.databind.DeserializationFeature">FAIL_ON_UNKNOWN_PROPERTIES</value>            <value>false</value>        </list>    </property></bean>