Заставьте Spring 3.1 использовать Jackson 2, когда Jackson 1 JARs на пути к классам

У меня есть приложение Spring MVC 3.1, созданное с помощью Maven, и я хочу использовать Jackson 2 для сериализации / десериализации JSON. Я явно включаю зависимости Jackson 2.x в мой файл pom.xml, хотя у моего приложения есть другая зависимость, которая использует Jackson 1.9.9 для внутреннего использования, и я не могу легко удалить эту зависимость.

Поскольку обе библиотеки Джексона присутствуют на пути к классам, кажется, что Spring по умолчанию использует версию 1.9.9 Jackson.

Как заставить Spring MVC использовать Jackson 2?

2 ответа

Решение

Чтобы это работало, мне пришлось настроить свой элемент конфигурации xvm-annotation-driven-xml, чтобы он работал следующим образом:

<mvc:annotation-driven>
  <mvc:message-converters register-defaults="false">
    <bean id="jacksonMessageConverter" 
      class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
  </mvc:message-converters>
</mvc:annotation-driven>

Поддержка Jackson 2 была добавлена ​​в Spring 3.2 и перенесена в Spring 3.1.2. Если у вас есть одна из этих версий, вам просто нужна библиотека jackson-databind на пути к классам, как описано здесь

В качестве альтернативы, Кит Дональд включил в этот список источник MappingJackson2HttpMessageConverter, как упомянуто в этом ответе.

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