【发布时间】:2012-03-01 13:35:40
【问题描述】:
我在 Spring MVC 及其 json 支持方面遇到了一个问题。我进行了一次 ajax 调用以获取一些数据,并且我想以 json 格式获取该数据,包括根值。我还在实体中使用JABX 注释,因为这些注释用于某些REST API。
我已经读到要获取Jackson 包含的根值,我应该使用这种方法:
this.configure(org.codehaus.jackson.map.DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
所以我创建了一个 objectMapper,它扩展了 codehaus 一个,看起来像这样:
public class JaxbJacksonObjectMapper extends ObjectMapper {
public JaxbJacksonObjectMapper() {
final AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
this.configure(org.codehaus.jackson.map.DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
super.getDeserializationConfig().withAnnotationIntrospector(introspector);
this.configure(org.codehaus.jackson.map.SerializationConfig.Feature.WRAP_ROOT_VALUE, true);
super.getSerializationConfig().withAnnotationIntrospector(introspector);
}
}
为了让 Spring 使用这个映射器,我配置了以下几行:
<beans:bean id="customObjectMapper" class="com.test.package.config.JaxbJacksonObjectMapper" />
<beans:bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<beans:property name="objectMapper" ref="customObjectMapper" />
</beans:bean>
<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<beans:property name="messageConverters">
<beans:list>
<beans:ref bean="jsonMessageConverter"/>
</beans:list>
</beans:property>
</beans:bean>
我的实体看起来像这样:
@XmlRootElement(name = "collection")
public class Issuers {
private List<Issuer> issuers;
}
问题是当Spring 3.1 将Issuers json 对象返回给浏览器时,它不包含collection 根元素。
知道如何解决这个问题吗?
谢谢!
【问题讨论】:
-
stackoverflow.com/q/2435527/923560 讨论了类似的挑战
-
如果你能解决这个问题,请告诉我们你做了什么!
标签: java spring-mvc jackson