Jackson 2.0与Spring 3.1

Eng*_*_DJ 28 java spring json spring-mvc jackson

Spring MVC 3.1与Jackson 2.0兼容吗?Spring MVC是否会在类路径上自动检测Jackson,并且使用JSON内容类型的请求委托给Jackson仍有效?

小智 23

凯斯唐纳德(泉源)在一段时间内发布了以下内容.

Spring MVC对Jackson 2的支持; 也适用于杰克逊的原生"漂亮印刷"功能https://gist.github.com/2423129

我没有尝试MappingJackson2HttpMessageConverter上面的要点,但如果它不起作用,它会让我感到惊讶.

  • 是的,它是有效的,他们添加了MappingJackson2HttpMessageConverter类,用于代替"旧"MappingJacksonHttpMessageConverter (5认同)

Ale*_*øld 21

在Spring 3.2中添加了对Jackson 2的支持,并且还向Spring 3.1.2(SPR-9507)提供了支持

  • 如果从1.x迁移,则需要更改pom.xml("步骤1:从Mass/JAR依赖关系更新来自http://www.cowtowncoder.com/blog/archives/2012/04/entry_469" .html是内置支持锁定所需的全部内容) (2认同)

Mic*_*nig 17

从Spring 3.1.2开始,你只需要在你的类路径中添加jackson-databind jar.

在Maven中,您可以像这样配置它:

<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>
Run Code Online (Sandbox Code Playgroud)

其余的魔法将由弹簧自动完成.

请参阅:http://norrisshelton.wordpress.com/2012/07/15/spring-3-mvc-with-json-via-jackson-2-0/


Man*_*nav 8

对于Spring 3.1.2和Jackson 2 -

  • 如上所述,自动支持JustWorks™

  • 但配置没有,因为大多数网络都充斥着Spring3/Jackson2之前的配置机制

所以对于后人,我会列出一个黑客(?或者这是官方的方式)来配置Jackson转换器.在这种特殊情况下,我正在配置转换器以ISO-8601格式返回日期:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这里描述了"官方"配置方法:http://wallsofchange.wordpress.com/2013/02/02/spring-mvc-rest-services-force-jackson-to-serialize-dates-as-iso- 8601-日期/.Jackson 2的唯一区别是你必须使用`MappingJackson2HttpMessageConverter`而不是`MappingJacksonHttpMessageConverter`和`SerializationFeature.WRITE_DATES_AS_TIMESTAMPS`而不是`SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS`. (2认同)