关于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格式的,在后台我们可以使⽤ l.bind.annotation 这个包格式化数据。
我们可以在做数据对应的dto是⽤@XmlElement注释标注对应节点
⽐如:
import java.io.Serializable;
l.bind.annotation.XmlAccessType;
l.bind.annotation.XmlAccessorType;
l.bind.annotation.XmlElement;
l.bind.annotation.XmlRootElement;
import org.apachemons.lang.builder.ToStringBuilder;
import org.apachemons.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")可以定义在类上,代表根节点
java xml是什么
@XmlAccessorType(XmlAccessType.FIELD)
表⽰使⽤这个类中的 private ⾮静态字段作为 XML 的序列化的属性或者元素。这⾥还可以选择属性,也就是使⽤ set/get ⽅法来序列化属性或者元素。关键在于在请求中有个extendInfos的array数组,⼀般我们都会⽤list来表⽰,所以在RequestBodyDTO中可以这么写:
import java.io.Serializable;
l.bind.annotation.XmlAccessType;
l.bind.annotation.XmlAccessorType;
l.bind.annotation.XmlElement;
l.bind.annotation.XmlRootElement;
import org.apachemons.lang.builder.ToStringBuilder;
import org.apachemons.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集合