如何告诉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é
答案 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>