如何告诉Spring 4.1.4使用MarshallingHttpMessageConverter而不是Jaxb2RootElementHttpMessageConverter?

时间:2015-02-10 18:34:48

标签: spring-mvc jaxb2

如何告诉Spring 4.1.4使用MarshallingHttpMessageConverter而不是Jaxb2RootElementHttpMessageConverter?以下代码段不起作用,因为RequestMappingHandlerAdapter确实使用在配置中声明的消息转换器;但是使用默认的预配置消息转换器。

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" scope="singleton">
    <property name="messageConverters" ref="messageConvertersList"/>
</bean>

谢谢,

Tonté

2 个答案:

答案 0 :(得分:0)

当使用

时,手动配置RequestMappingHandlerAdapter不会
<mvc:annotation-driven/>

因为此配置告诉spring自动使用预配置的消息转换器。要使用手动配置的MarshallingHttpMessageConverter,您必须先从配置中删除<mvc:annotation-driven/>,然后按上述方法手动配置RequestMappingHandlerAdapter,如下所示:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="messageConverters" ref="messageConvertersList"/>
</bean>

答案 1 :(得分:0)

我找到了另一个解决方案(使用spring 3.2.2测试,也应该在4.1.4中运行:http://docs.spring.io/autorepo/docs/spring/4.1.4.RELEASE/spring-framework-reference/html/mvc.html#mvc-config) - 将您的消息转换器放入<mvc:annotation-driven>标记:

<mvc:annotation-driven>
    <mvc:message-converters>
            <bean id="marshallingHttpMessageConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
                <property name="marshaller" ref="marshaller" />
                <property name="unmarshaller" ref="marshaller" />
            </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

其中

<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="schema" value="classpath:/my-schema.xsd" />
    <property name="contextPath" value="my.package.with.generated.classes" />
</bean>