Search code examples
springjacksonjson-deserialization

Spring Jackson custom Deserializer does not called


I have a Spring project, and I try to add a custom deserializer to deserialize Date properties depend on their format. If I use it as annotation on Date property, it works fine. But if I add the deserializer to my object mapper, it does not called when Jackson deserialize a date.

I try to apply my custom deserializer like this:

    @Bean
public ObjectMapper objectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    SimpleModule module = new SimpleModule();
    module.addDeserializer(Date.class, new DateDeserializer());
    mapper.registerModule(module);
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
    mapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, false);
    mapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, false);
    mapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false);
    return mapper;
}

I don't want to apply an annotation on Date properties every time, I want to use this deserializer by default. What I do wrong?


Solution

  • Thanks the help for everyone. Finally I found the answer at spring.io.

    @Configuration
    @EnableWebMvc
    public class WebConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        builder.deserializerByType(Date.class, new DateDeserializer());
        converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
       }
    }