Spring MVC 中如需设置Jackson的一些参数,可以这么干

参考资料 1. http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.html

<mvc:annotation-driven>
		<mvc:message-converters register-defaults="true">
			<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
				<property name="objectMapper">
					<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
						<property name="featuresToEnable">
							<array>
								<util:constant static-field="com.fasterxml.jackson.databind.SerializationFeature.WRAP_ROOT_VALUE" />
							</array>
						</property>
					</bean>
				</property>
			</bean>
  		</mvc:message-converters>
	</mvc:annotation-driven>

解释,上面那这个例子是我实际的配置节选,配置输出json时把对象作为根元素。通过配置jackson的SerializationFeature.WRAP_ROOT_VALUE来达到目的。

Spring MVC默认配置就只需一个 <mvc:annotation-driven\>,文档( http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/mvc.html#mvc-config-enable )里说了会加载一大串converter,而Jackson有很多配置项,要达到能够自由配置Jackson的目的,按照参考资料 1. 里的内容,我们还可以做如下配置。

<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
   <property name="objectMapper">
     <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"
       p:autoDetectFields="false"
       p:autoDetectGettersSetters="false"
       p:annotationIntrospector-ref="jaxbAnnotationIntrospector" />
   </property>
 </bean>

或者

<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
   <property name="objectMapper">
     <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"
       p:failOnEmptyBeans="false"
       p:indentOutput="true">
       <property name="serializers">
         <array>
           <bean class="org.mycompany.MyCustomSerializer" />
         </array>
       </property>
     </bean>
   </property>
 </bean>

如果没有可直接用的setter属性

<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
   <property name="featuresToEnable">
     <array>
       <util:constant static-field="com.fasterxml.jackson.databind.SerializationFeature$WRAP_ROOT_VALUE"/>
       <util:constant static-field="com.fasterxml.jackson.databind.SerializationFeature$CLOSE_CLOSEABLE"/>
     </array>
   </property>
   <property name="featuresToDisable">
     <array>
       <util:constant static-field="com.fasterxml.jackson.databind.MapperFeature$USE_ANNOTATIONS"/>
     </array>
   </property>
 </bean>

进而用自定义Module来配置 ObjectMapper

<bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
   <property name="modulesToInstall" value="myapp.jackson.MySampleModule,myapp.jackson.MyOtherModule"/>
</bean>














转载于:https://my.oschina.net/fornews/blog/358014

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值