@JsonIgnoreProperties(ignoreUnknown=false) is not working in Spring 4.2.0 and upper version

后端 未结 4 1939
无人共我
无人共我 2020-12-21 05:24

@JsonIgnoreProperties(ignoreUnknown=false) is not working with spring 4.2.0 and upper version of spring. But it is working with 4.0.4 and 4.0.1 . I am using spring 4.2.8 and

相关标签:
4条回答
  • 2020-12-21 06:02

    @Aarya's answer did not work for me right out of box, but gave me a great hint to look around. So this is what works for me. Given that my Spring is 4.3.12.RELEASE and jackson is 2.9.2

    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                        <bean class="com.fasterxml.jackson.databind.ObjectMapper" />
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    
    0 讨论(0)
  • 2020-12-21 06:04

    An annotation based solution to the based on the answer from Aarya can done in the following way:

    @Configuration
    public class Config implements InitializingBean {
    
        @Autowired
        private RequestMappingHandlerAdapter converter;
    
        @Override
        public void afterPropertiesSet() throws Exception {
            configureJacksonToFailOnUnknownProperties();
        }
    
        private void configureJacksonToFailOnUnknownProperties() {
            MappingJackson2HttpMessageConverter httpMessageConverter = converter.getMessageConverters().stream()
                    .filter(mc -> mc.getClass().equals(MappingJackson2HttpMessageConverter.class))
                    .map(mc -> (MappingJackson2HttpMessageConverter)mc)
                    .findFirst()
                    .get();
    
            httpMessageConverter.getObjectMapper().enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        }
    }
    
    0 讨论(0)
  • 2020-12-21 06:17

    This is happening because the HttpMessageConverter provided by the earlier versions of spring were using ObjectMapper default configuration. But the newer versions of spring use Jackson2ObjectMapperBulider which has DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES property set to false by default. (Reference link). You can solve this issue by adding the following in your applicationContext.xml:

    <bean id="jacksonObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper" />
    
    <mvc:annotation-driven
        content-negotiation-manager="contentNegotiationManager">
        <mvc:message-converters>
            <bean
                class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper" ref="jacksonObjectMapper" />
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <bean id="contentNegotiationManager"
        class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
        <property name="favorPathExtension" value="false" />
        <property name="mediaTypes">
            <value>
                json=application/json
            </value>
        </property>
    </bean>
    
    0 讨论(0)
  • 2020-12-21 06:22

    Easy annotation driven solution. In a @Configuration:

    @Bean
    @Primary
    public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
        return objectMapper;
    }
    
    0 讨论(0)
提交回复
热议问题