业务场景:用户发送下单请求,格式为xml格式,服务器接收数据完成下单,并返回结果给客户。
请求格式:
这段请求报文是xml格式的,在后台我们可以使用 javax.xml.bind.annotation 这个包格式化数据。
我们可以在做数据对应的dto是用@XmlElement注释标注对应节点
比如:
importjava.io.Serializable;importjavax.xml.bind.annotation.XmlAccessType;importjavax.xml.bind.annotation.XmlAccessorType;importjavax.xml.bind.annotation.XmlElement;importjavax.xml.bind.annotation.XmlRootElement;importorg.apache.commons.lang.builder.ToStringBuilder;importorg.apache.commons.lang.builder.ToStringStyle;importcom.juqitech.adapter.dto.ChannelDTO;
@XmlRootElement(name= "request")
@XmlAccessorType(XmlAccessType.NONE)public class RequestDTO implementsSerializable {private static final long serialVersionUID = -1;
@XmlElementprivateRequestHeaderDTO head;
@XmlElementprivateRequestBodyDTO body;publicRequestHeaderDTO getHead() {returnhead;
}public voidsetHead(RequestHeaderDTO head) {this.head =head;
}publicRequestBodyDTO getBody() {returnbody;
}public voidsetBody(RequestBodyDTO body) {this.body =body;
}
}
@XmlRootElement(name = "request")可以定义在类上,代表根节点
@XmlAccessorType(XmlAccessType.FIELD)
表示使用这个类中的 private 非静态字段作为 XML 的序列化的属性或者元素。这里还可以选择属性,也就是使用 set/get 方法来序列化属性或者元素。
关键在于在请求中有个extendInfos的array数组,一般我们都会用list来表示,所以在RequestBodyDTO中可以这么写:
importjava.io.Serializable;importjavax.xml.bind.annotation.XmlAccessType;importjavax.xml.bind.annotation.XmlAccessorType;importjavax.xml.bind.annotation.XmlElement;importjavax.xml.bind.annotation.XmlRootElement;importorg.apache.commons.lang.builder.ToStringBuilder;importorg.apache.commons.lang.builder.ToStringStyle;importcom.juqitech.adapter.dto.ChannelDTO;
@XmlRootElement(name= "body")
@XmlAccessorType(XmlAccessType.NONE)public class RequestBodyDTO implementsSerializable {private static final long serialVersionUID = -1;//....前面的属性省略
@XmlElementWrapper(name="extendInfos")
@XmlElement(name="extendInfo")private ListextendInfos;//。。其他的省略
}
@XmlRootElement(name= "extendInfo")
@XmlAccessorType(XmlAccessType.NONE)public classextendInfo{
@XmlElementprivateString city;
@XmlElementprivateString province;
@XmlElementprivateString district;//省略
}
@XmlElementWrapper 这个注释用来在外面在包一层,用于处理list集合