[英]How to unmarshall xml from Http Post Rest Web Service with Jaxb using spring mvc?
我的Spring MVC Web服務代碼如下。
型號類別
@XmlRootElement(name="secretData")
public class VData {
private long lKId;
@XmlElement(name="kId")
public long getlKId() {
return lKId;
}
public void setlKId(long lKId) {
this.lKId = lKId;
}
}
控制器方式
@RequestMapping(value = "/vendor", method = RequestMethod.POST)
public String addVendor(@RequestBody VData vData) {
/*Checking recieved value*/
System.out.println(vData.getlKId());//**Returning 0 value **
return "Success";
}
Xml Web服務的請求主體
<secretData>
<kId>1</kId>
</secretData>
我在lKId中得到“ 0”值。 我在哪里做錯了。 請提供使用@XmlElement(name =“ kId”)批注將xml元素綁定到對象成員的正確方法。
在@RequestMapping
添加consumes = MediaType.APPLICATION_XML_VALUE
以告訴控制器此方法僅消耗xml。
@RequestMapping(value = "/vendor", method = RequestMethod.POST, consumes = MediaType.APPLICATION_XML_VALUE)
public String addVendor(@RequestBody VData vData) {
/*Checking recieved value*/
System.out.println(vData.getlKId());//**Returning 0 value **
return "Success";
}
在通過http發布xml的同時,設置標頭Content-type:application/xml
為了在Spring Web MVC中啟用OXM(對象到XML的映射),Spring需要一個HttpMessageConverter,它可以從XML讀/寫到XML。 Spring中有幾種使用Jackson,XStream,JAXB等實現的實現。
當Spring在類路徑中檢測到這些庫之一時,Spring應該自動添加一個HttpMessageConverter。 您在類路徑上有JAXB庫嗎?
您還可以手動將Jaxb2RootElementHttpMessageConverter注冊為Bean。 通過JavaConfig,它看起來像:
@Bean
public HttpMessageConverter oxmHttpMessageConverter() {
return new Jaxb2RootElementHttpMessageConverter();
}
您必須在setter而不是getter上添加@XmlElement批注。 @XmlAttribute批注必須放在getter上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.