Jackson 2.0 with Spring 3.1
Solution 1
Support for Jackson 2 has been added in Spring 3.2, and has also backported to Spring 3.1.2 (SPR-9507)
Solution 2
Keith Donald (of spring source) tweeted the following a while back.
Spring MVC support for Jackson 2; also works with Jackson's native "pretty print" feature https://gist.github.com/2423129
I haven't tried the MappingJackson2HttpMessageConverter
found in the gist above but it would surprise me if it did not work.
Solution 3
Since Spring 3.1.2 you simply have to add jackson-databind jar to your classpath.
In Maven you can configure it like this:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
The rest of the magic will be done by spring automatically.
See: http://norrisshelton.wordpress.com/2012/07/15/spring-3-mvc-with-json-via-jackson-2-0/
Solution 4
For Spring 3.1.2 and Jackson 2 -
As outlined above, the automatic support JustWorks™
but configuration doesn't, as most of the web is littered with pre Spring3/Jackson2 configuration mechanisms
So for posterity, I'll list out a hack(? or is this the official way) to configure the Jackson converter. In this particular case, I am configuring the converter to return dates in the ISO-8601 format:
package foo.bar.JacksonConfig;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Component;
@Component
public class JacksonConfig implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
if (bean instanceof MappingJackson2HttpMessageConverter) {
MappingJackson2HttpMessageConverter jsonConverter =
(MappingJackson2HttpMessageConverter) bean;
ObjectMapper objectMapper = jsonConverter.getObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
jsonConverter.setObjectMapper(objectMapper);
}
return bean;
}
}
Solution 5
To be clear, Spring 3.1 doesn't have native support for Jackson 2. It's in Spring 3.2
DeejUK
I tell computers to do things. Sometimes I even tell them to do the right things. I also help people get better at telling computers to do things. Some of the things I tell computers to do are games, but most are related to distributed services, PaaS, NoSQL, and that sort of thing.
Updated on March 30, 2020Comments
-
DeejUK about 4 years
Is Spring MVC 3.1 compatible with Jackson 2.0? Will Spring MVC's automatic detection of Jackson on the classpath, and delegation to Jackson for requests with a JSON content-type still work?
-
nicholas.hauschild about 12 yearsWhy wouldn't they? Have you tried and observed that it doesn't work?
-
danny.lesnik about 12 years
-
-
Manav almost 12 yearsYou'll need to change your pom.xml if you're migrating from 1.x (
Step 1: Update Maven / JAR dependencies
from cowtowncoder.com/blog/archives/2012/04/entry_469.html is all you need for the builtin support to latch on) -
Roy Truelove over 11 yearsI'm sure that this is not the official way but it's very clever!
-
emas over 11 yearsYes it works, they added the MappingJackson2HttpMessageConverter class that is meant to be used instead of the "old" MappingJacksonHttpMessageConverter
-
Ryan Walls about 11 yearsThe "official" method of configuring this is described here: wallsofchange.wordpress.com/2013/02/02/…. The only difference for Jackson 2 is that you have to use
MappingJackson2HttpMessageConverter
instead ofMappingJacksonHttpMessageConverter
andSerializationFeature.WRITE_DATES_AS_TIMESTAMPS
instead ofSerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS
. -
Adam about 2 yearsBoth of these did the trick for me.