DeejUK
DeejUK

Reputation: 13471

Jackson 2.0 with Spring 3.1

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?

Upvotes: 30

Views: 60003

Answers (6)

malajisi
malajisi

Reputation: 2233

I didn't test Spring MVC 3.1 compatible with Jackson 2.0. But I encounter 3.0.5 compatible issue. Finally I find Spring MVC 3.0.5 is only compatible with Jackson 1.0.0, definitely Jackson 1.5.3 isn't compatible!!!

Upvotes: 0

Aleksander Blomskøld
Aleksander Blomskøld

Reputation: 18552

Support for Jackson 2 has been added in Spring 3.2, and has also backported to Spring 3.1.2 (SPR-9507)

Upvotes: 22

Michael K.
Michael K.

Reputation: 497

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/

Upvotes: 17

Manav
Manav

Reputation: 10314

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;
    }
}

Upvotes: 9

Marc
Marc

Reputation: 7022

To be clear, Spring 3.1 doesn't have native support for Jackson 2. It's in Spring 3.2

Upvotes: 2

Fredrik
Fredrik

Reputation: 416

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.

Upvotes: 24

Related Questions