關於java后台如何接收xml格式的數據


業務場景:用戶發送下單請求,格式為xml格式,服務器接收數據完成下單,並返回結果給客戶。

 請求格式:

<request>
   <head>
     <sign></sign>
     <time></time>
     <msg></msg>
  </head>
  <body>
    <productId></productId>
    <count></count>
    <price></price>
    <user>
       <userId></userId>
       <name></name>
       <mobil></mobil>
       <email></email>
    </user>
    <extendInfos>
       <extendInfo>
          <city></city>
          <province></province>
          <district></district>
          <address></address>
       </extendInfo>
    </extendInfos>
  </body>
</request>

這段請求報文是xml格式的,在后台我們可以使用 javax.xml.bind.annotation 這個包格式化數據。

我們可以在做數據對應的dto是用@XmlElement注釋標注對應節點

比如:

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import com.juqitech.adapter.dto.ChannelDTO;

@XmlRootElement(name = "request")
@XmlAccessorType(XmlAccessType.NONE)
public class RequestDTO implements Serializable {

    private static final long serialVersionUID = -1;

    @XmlElement
    private RequestHeaderDTO head;
    
    @XmlElement
    private RequestBodyDTO body;

    public RequestHeaderDTO getHead() {
        return head;
    }

    public void setHead(RequestHeaderDTO head) {
        this.head = head;
    }

    public RequestBodyDTO getBody() {
        return body;
    }

    public void setBody(RequestBodyDTO body) {
        this.body = body;
    }

}
@XmlRootElement(name = "request")可以定義在類上,代表根節點
@XmlAccessorType(XmlAccessType.FIELD)
表示使用這個類中的 private 非靜態字段作為 XML 的序列化的屬性或者元素。這里還可以選擇屬性,也就是使用 set/get 方法來序列化屬性或者元素。

關鍵在於在請求中有個extendInfos的array數組,一般我們都會用list來表示,所以在RequestBodyDTO中可以這么寫:

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import com.juqitech.adapter.dto.ChannelDTO;

@XmlRootElement(name = "body")
@XmlAccessorType(XmlAccessType.NONE)
public class RequestBodyDTO implements Serializable {

    private static final long serialVersionUID = -1;

    //....前面的屬性省略


    @XmlElementWrapper(name="extendInfos") 
    @XmlElement(name="extendInfo") 
    private List<extendInfo> extendInfos;
    
     //。。其他的省略

}
@XmlRootElement(name
= "extendInfo") @XmlAccessorType(XmlAccessType.NONE) public class extendInfo{ @XmlElement private String city; @XmlElement private String province; @XmlElement private String district; //省略 }
@XmlElementWrapper 這個注釋用來在外面在包一層,用於處理list集合
 
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM