You don't say how you're using Jackson in Spring, so I'll assume you're using it through <mvc:annotation-driven/>
and the @RequestBody
and/or @ResponseBody
annotations.
One of the things that <mvc:annotation-driven/>
does is to register a AnnotationMethodHandlerAdapter
bean which comes with a number of pre-configured HttpMessageConverter
beans, including MappingJacksonHttpMessageConverter
, which handles marshalling to and from Jackson-annotated model classes.
Now MappingJacksonHttpMessageConverter
has a setObjectMapper()
method, which allows you to override the default ObjectMapper
. But since MappingJacksonHttpMessageConverter
is created behind the scenes by <mvc:annotation-driven/>
, you can't get to it.
However, <mvc:annotation-driven/>
is just a convenient short-cut. It's just as a valid to declare your own AnnotationMethodHandlerAdapter
bean, injecting into it your own MappingJacksonHttpMessageConverter
bean (via the messageConverters
property), and injecting your own customized ObjectMapper
into that.
You then have the problem of how to build a custom ObjectMapper
, since it's not a very Spring-friendly class. I suggest writing your own simple implementation of FactoryBean
.
So you'd end up with something like this:
<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>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…