簡體   English   中英

如何使用Spring MVC從Jaxb的Http Post Rest Web Service中解組XML?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM