Spring, Jackson and Customization (e.g. CustomDeserializer)
jackson, json, spring, spring-mvc, web-services
Solution
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>
Problem
Being still a little unfamiliar with Spring, I have encountered a problem that makes it necessary implementing my a custom deserialzer for Jackson. The procedure is described in a small tutorial, however, I am stuck with Spring. I do not understand, where ``` ObjectMapper mapper = new ObjectMapper(); ``` in Spring MVC is carried out when json is deserializes by a method of a controller class. So I do not know, what to do in order to replace the default deserializer by a custom deserialiser. Any suggestions most welcome.