关于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集合
 

__EOF__

本文作者Jun10ng
本文链接https://www.cnblogs.com/wangzun/p/7356463.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Johnson_wang  阅读(14024)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示