关于java后台如何接收xml格式的数据

java

业务场景:用户发送下单请求,格式为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集合
 

以上是 关于java后台如何接收xml格式的数据 的全部内容, 来源链接: utcz.com/z/389658.html

回到顶部