Spring,Jackson和自定义(例如CustomDeserializer)

我还是不熟悉Spring,但遇到了一个问题,有必要为Jackson实施自定义解串器。该过程在一个小教程中进行了描述,但是,我仍然对Spring

有所了解。我不明白,在哪里

 ObjectMapper mapper = new ObjectMapper();

在Spring MVC中,当通过控制器类的方法对json反序列化时执行。所以我不知道该怎么做才能用自定义解串器替换默认的解串器。

任何建议最欢迎。

回答:

您没有说您在春季如何使用Jackson,所以我假设您通过<mvc:annotation-

driven/>@RequestBody和/或@ResponseBody注解使用它。

要做的一件事<mvc:annotation-

driven/>是注册一个AnnotationMethodHandlerAdapter带有许多预配置HttpMessageConverterBean的Bean,其中包括MappingJacksonHttpMessageConverter,该Bean

处理来往于Jackson注释的模型类之间的编组。

现在MappingJacksonHttpMessageConverter有了一个setObjectMapper()方法,可以让您覆盖默认值ObjectMapper。但是由于MappingJacksonHttpMessageConverter是由创建的<mvc:annotation-

driven/>,所以您无法实现。

但是,<mvc:annotation-

driven/>这只是一个便捷的捷径。声明自己的AnnotationMethodHandlerAdapterbean,将自己的bean注入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>

以上是 Spring,Jackson和自定义(例如CustomDeserializer) 的全部内容, 来源链接: utcz.com/qa/411793.html

回到顶部