How to stop jackson from writing dates as timestamp in SpringMVC

Viewed 15864

I have been going through a tutorial on Spring boot and there I learnt how to stop jackson from converting dates to timestamp. eg :

{"birthDate":1505736233603} //before
{"birthDate":"2017-09-18T12:04:27.345+0000"}//after

by writing

 spring.jackson.serialization.write-dates-as-timestamps=false

in application.properties.

How do I do the same for SpringMVC, ofcourse there is no application.properties in SpringMVC

3 Answers

Another way is to configure the MessageConverter after they have been populated/configured by the framework:

@EnableWebMvc
@Configuration
public class AppConfiguration implements WebMvcConfigurer {
    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof AbstractJackson2HttpMessageConverter) {
                AbstractJackson2HttpMessageConverter jacksonconverter = (AbstractJackson2HttpMessageConverter) converter;
                jacksonconverter.getObjectMapper()
                        .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
            }
        }
    }
}

Moreover, this code should also apply to SMILE because MappingJackson2SmileHttpMessageConverter extends AbstractJackson2HttpMessageConverter.

if you have access to the ObjectMapper, you can also set it as a property programmatically

ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.setDateFormat(new ISO8601DateFormat());
Related