我在接收 XML 作为输入的 Web 服务中使用 Spring。它可以是嵌入在 HTTP 请求中的 XML,也可以是请求属性中的纯文本。
目前,我的 Web 服务正在处理两种不同的 XML 模式,因此我的解组器可以将 XML 文件解组为两种对象类型(例如:Foo 和 Bar)。
在我的控制器中,我有下一个代码来处理请求属性:
@RequestMapping(value={"/mypath"}, method={RequestMethod.POST}, headers={"content-type=application/x-www-form-urlencoded"})
@ResponseBody
public ResponseObject getResponse(@RequestParam("request") String request, HttpServletRequest req) {
它完美地工作,我可以将请求字符串解组为 Foo 对象或 Bar 对象。
问题来自于 XML 嵌入:
@RequestMapping(value={"/mypath"}, method={RequestMethod.POST}, headers={"content-type=text/xml"})
@ResponseBody
public ResponseObject getResponse(@RequestBody Foo request, HttpServletRequest req) {
和
@RequestMapping(value={"/mypath"}, method={RequestMethod.POST}, headers={"content-type=text/xml"})
@ResponseBody
public ResponseObject getResponse(@RequestBody Bar request, HttpServletRequest req) {
这是消息转换器:
<bean id="marshallingHttpMessageConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
<property name="marshaller" ref="jaxb2Marshaller" />
<property name="unmarshaller" ref="jaxb2Marshaller" />
</bean>
<oxm:jaxb2-marshaller id="jaxb2Marshaller" contextPath="path.to.Foo:path.to.Bar"/>
我认为 MessageConverter 应该自动解组,但我收到下一个错误:
java.lang.IllegalStateException: 为 HTTP 路径“/ws/mypath.ws”映射的不明确的处理程序方法:[...] 如果您打算在多个方法中处理相同的路径,那么将它们分解到一个专用的处理程序类中在类型级别映射的路径!
如何自动解组为不同的@RequestBody
对象类型?(具有相同的Web 服务路径)