我用它接收XML作爲輸入我的web服務春天。它可以是XML在HTTP請求或作爲請求屬性明文embebed。如何對不同的@RequestBody對象類型解組?
目前我的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對象或酒吧對象。
問題自帶的XML embebed:
@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) {
而這裏的MessageConverter:
<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: Ambiguous handler methods mapped for HTTP path '/ws/mypath.ws': [...] If you intend to handle the same path in multiple methods, then factor them out into a dedicated handler class with that path mapped at the type level!
如何自動解除對不同的@RequestBody
對象類型的解組? (具有相同的Web服務路徑)
好了,感謝您的澄清。在這種情況下,我不能有兩個不同的'@ RequestMapping',所以我必須在這裏改變我的方法。我認爲最好的方式來「解決」,這是[使用HttpServletRequest對象(http://stackoverflow.com/questions/7476372/alternative-of-requestbody)來獲取輸入流,但我失去自動的在和解組functionallity。 – ilazgo