Джексон 2.0 с пружиной 3.1

Совместим ли Spring MVC 3.1 с Jackson 2.0? Будет ли по-прежнему работать автоматическое обнаружение Джексоном SpringpC пути к классам и делегирование Джексону запросов с типом содержимого JSON?

6 ответов

Решение

Поддержка Jackson 2 была добавлена ​​в Spring 3.2, а также перенесена в Spring 3.1.2 ( SPR-9507)

Кит Дональд (из источника весны) написал в твиттере некоторое время назад.

Поддержка Spring MVC для Jackson 2; также работает с нативной функцией "Pretty Print" Джексона https://gist.github.com/2423129

Я не пробовал MappingJackson2HttpMessageConverter найденный в сущности выше, но это удивило бы меня, если бы это не работало.

Начиная с Spring 3.1.2 вы просто должны добавить jar-файл базы данных jackson в ваш путь к классам.

В 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>

Остальная магия будет сделана весной автоматически.

Смотрите: http://norrisshelton.wordpress.com/2012/07/15/spring-3-mvc-with-json-via-jackson-2-0/

Для весны 3.1.2 и Джексона 2 -

  • Как указано выше, автоматическая поддержка JustWorks™

  • но конфигурация не, так как большая часть сети изобилует механизмами предварительной настройки Spring3/Jackson2

Так что для потомков я перечислю хак (? Или это официальный способ) для настройки конвертера Джексона. В этом конкретном случае я настраиваю конвертер для возврата дат в формате 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;
    }
}

Чтобы быть понятным, Spring 3.1 не имеет встроенной поддержки Jackson 2. Это в Spring 3.2

Я не тестировал Spring MVC 3.1, совместимый с Jackson 2.0. Но я сталкиваюсь с 3.0.5 совместимой проблемой. Наконец, я обнаружил, что Spring MVC 3.0.5 совместим только с Jackson 1.0.0, определенно, Jackson 1.5.3 не совместим!!!

Другие вопросы по тегам