Вы не говорите, как используете Джексона в Spring, поэтому я предполагаю, что вы используете его через <mvc:annotation-driven/>
и аннотации @RequestBody
и / или @ResponseBody
.
Одна из вещей, которую делает <mvc:annotation-driven/>
, - это регистрация bean-компонента AnnotationMethodHandlerAdapter
, который поставляется с несколькими предварительно сконфигурированными bean-компонентами HttpMessageConverter
, включая MappingJacksonHttpMessageConverter
, который обрабатывает маршаллинг для аннотируемых Джексоном классов моделей .
Теперь MappingJacksonHttpMessageConverter
имеет метод setObjectMapper()
, который позволяет переопределить значение по умолчанию ObjectMapper
. Но поскольку MappingJacksonHttpMessageConverter
создается за кулисами <mvc:annotation-driven/>
, вы не можете добраться до него.
Однако, <mvc:annotation-driven/>
- это просто удобное сокращение. Также можно объявить свой собственный компонент AnnotationMethodHandlerAdapter
, добавить в него свой собственный компонент MappingJacksonHttpMessageConverter
(через свойство messageConverters
) и добавить в него свой собственный настроенный ObjectMapper
.
Тогда возникает проблема, как создать пользовательский ObjectMapper
, так как это не очень дружественный для Spring класс. Я предлагаю написать собственную простую реализацию FactoryBean
.
Таким образом, вы получите что-то вроде этого:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper">
<bean class="com.x.MyObjectMapperFactoryBean"/>
</property>
</bean>
</property>
</bean>