jackson2 JSON ISO 8601 date from JodaTime in Spring 3.2RC1 jackson2 JSON ISO 8601 date from JodaTime in Spring 3.2RC1 json json

jackson2 JSON ISO 8601 date from JodaTime in Spring 3.2RC1


Or, if you prefer doing your configuration in Java, it could look like this:

@Configuration@EnableWebMvcpublic class RestConfig extends WebMvcConfigurerAdapter {    private ObjectMapper objectMapper() {        Jackson2ObjectMapperFactoryBean bean = new Jackson2ObjectMapperFactoryBean();        bean.setIndentOutput(true);        bean.setSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");        bean.afterPropertiesSet();        ObjectMapper objectMapper = bean.getObject();        objectMapper.registerModule(new JodaModule());        return objectMapper;    }    private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();        converter.setObjectMapper(objectMapper());        return converter;    }    @Override    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {        converters.add(mappingJackson2HttpMessageConverter());    }}


I eventually got it working using jackson-datatype-joda:

Add another Maven dependency (match your Jackson version number):

<dependency>    <groupId>com.fasterxml.jackson.datatype</groupId>    <artifactId>jackson-datatype-joda</artifactId>    <version>${jackson.version}</version></dependency>

Then register the JodaModule (which handles the conversion) to Jackson's ObjectMapper (here done in Spring, but you could create a helper class):

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"    p:targetObject-ref="objectMapper" p:targetMethod="registerModule">    <property name="arguments">        <list><bean class="com.fasterxml.jackson.datatype.joda.JodaModule"/></list>    </property></bean>

(You'll need to give the ObjectMapper an id so that it can be referenced in this way).

The Hibernate module is also registered in this way: https://github.com/FasterXML/jackson-module-hibernate

Note that you need to set a (Simple)DateFormat as shown in the question, but disabling SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS didn't seem to make any difference.


Just to sum up answers and post working solution for JodaTime serialization in Spring (tested on Spring 3.2)

spring-context.xml

<bean id="objectMapper"    class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"    p:indentOutput="true" p:simpleDateFormat="yyyy-MM-dd'T'HH:mm:ss.SSSZ"></bean><bean    class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"    p:targetObject-ref="objectMapper" p:targetMethod="registerModule">    <property name="arguments">        <list>            <bean class="com.fasterxml.jackson.datatype.joda.JodaModule" />        </list>    </property></bean><mvc:annotation-driven>    <mvc:message-converters>        <bean class="org.springframework.http.converter.StringHttpMessageConverter" />        <bean            class="org.springframework.http.converter.ResourceHttpMessageConverter" />        <bean            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">            <property name="objectMapper" ref="objectMapper" />        </bean>    </mvc:message-converters></mvc:annotation-driven>

Maven dependencies (com.fasterxml.jackson-version is 2.1.1)

<dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-core</artifactId>    <version>${com.fasterxml.jackson-version}</version></dependency><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId>    <version>${com.fasterxml.jackson-version}</version></dependency><dependency>    <groupId>com.fasterxml.jackson.datatype</groupId>    <artifactId>jackson-datatype-joda</artifactId>    <version>${com.fasterxml.jackson-version}</version></dependency>

After this your JodaTime fields in ResponseBody will be automatically serialized in JSON as "createdDate" : "2013-01-18T15:15:36.365+02:00"