Заставьте 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, как упомянуто в этом ответе.