jackson jaxb注释在Spring中得到支持

时间:2012-02-02 10:19:52

标签: spring spring-mvc jaxb jackson

我正在寻找为jackson添加jaxb注释支持的最简单方法。 杰克逊现在被<mvc:annotation-driven/>添加到Spring。我需要通过@ResponseBody注释将Object转换为依赖于媒体类型的xml或json。 我是spring-mvc的新手,所以不太清楚它是如何工作的。感谢。

1 个答案:

答案 0 :(得分:3)

好的,我假设您希望能够同时返回XML和JSON。为此,您需要为两种格式创建MessageConverter

XML消息转换器:

<bean id="xmlConverter"
    class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
    <constructor-arg>
        <oxm:jaxb2-marshaller id="jaxb2Marshaller">
            <!-- you must either bind your JAXB annotated classes here -->
            <!-- OR provide a jaxb.index and use contextPath -->
            <oxm:class-to-be-bound name="com.mycompany.MyClass"/>
        </oxm:jaxb2-marshaller>
    </constructor-arg>
    <property name="supportedMediaTypes">
        <list>
            <bean class="org.springframework.http.MediaType">
                <constructor-arg index="0" value="application"/>
                <constructor-arg index="1" value="xml"/>
                <constructor-arg index="2" value="UTF-8"/>
            </bean>
        </list>
    </property>
</bean>

JSON消息转换器,它使用JAXB注释:

<bean id="jaxbAnnotationInspector"
    class="org.codehaus.jackson.xc.JaxbAnnotationIntrospector"/>
<bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper">
    <property name="annotationIntrospector" ref="jaxbAnnotationInspector"/>
</bean>
<bean id="jsonConverter"
    class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
    <property name="objectMapper">
        <bean ref="jacksonObjectMapper"/>
    </property>
    <property name="supportedMediaTypes">
        <list>
            <bean class="org.springframework.http.MediaType">
                <constructor-arg index="0" value="application"/>
                <constructor-arg index="1" value="json"/>
                <constructor-arg index="2" value="UTF-8"/>
            </bean>
        </list>
    </property>
</bean>

最后,AnnotationMethodHandlerAdapter,将响应转换为适当的内容类型,具体取决于接受标头:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="xmlConverter"/>
            <ref bean="jsonConverter"/>
        </list>
    </property>
</bean>

请注意,jackson中的JAXB支持并非100%完整或正确,但开发人员非常擅长修复错误并响应错误报告。