【发布时间】:2011-01-25 04:42:51
【问题描述】:
我正在尝试创建一个简单的基于 spring 的 web 服务,它支持带有 xml 内容的“post”。
在春天,我定义了一个 AnnotationMethodHandler:
<bean id="inboundMessageAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<util:list>
<bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
<property name="marshaller" ref="xmlMarshaller"/>
<property name="unmarshaller" ref="xmlMarshaller"/>
</bean>
</util:list>
</property>
</bean>
还有一个基于 jaxb 的 xml 编组器:
<bean id="xmlMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPaths">
<array>
<value>com.company.schema</value>
</array>
</property>
<property name="schemas">
<array>
<value>classpath:core.xsd</value>
</array>
</property>
</bean>
我的控制器注释如下,其中“资源”是由 jaxb 自动生成的一个类:
@RequestMapping(method = POST, value = "/resource")
public Resource createResource(@RequestBody Resource resource) {
// do work
}
网络服务调用的结果总是“HTTP/1.1 415 Unsupported Media Type”。这是一个示例服务调用:
HttpPost post = new HttpPost(uri);
post.addHeader("Accept", "application/xml");
post.addHeader("Content-Type", "application/xml");
StringEntity entity = new StringEntity(request, "UTF-8");
entity.setContentType("application/xml");
post.setEntity(entity);
在我看来,我正在尽可能地设置正确的媒体类型。有人有想法吗?
编辑:在进一步调试之后,它看起来好像永远不会尝试解组对象。我不太明白 AnnotationMethodHandler 如何知道 application/xml 类型的东西应该进入 MarshallingHttpConverter 背后的黑魔法。任何人都可以对此有所了解吗?
【问题讨论】:
标签: java spring rest spring-mvc jaxb