xstream 解析xml报文
2024-08-29 10:31:39
一、xml一种格式的数据转换为对象
pom.xml引入
<!--javaBean和XML的双向转换-->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.</version>
</dependency>
xml文件模板
<?xml version="1.0" encoding="GBK"?>
<MESSAGE>
<MESSAGEHEAD>
<MESSAGEID/>
<SRC/>
</MESSAGEHEAD>
<MESSAGEBODY>
<TRANLIST>
<TRAN_DATE/>
<TRAN_TIME/>
</TRANLIST>
</MESSAGEBODY>
</MESSAGE>
后台需要创建
1、 总类Total
class Total
private static final String headInfo = "<?xml version=\"1.0\" encoding=\"GBK\"?>"; @XStreamAlias("MESSAGEHEAD")
private Head head; @XStreamAlias("MESSAGEBODY")
private Body body;
// getter setter
2、头部信息Head
class Head
@XStreamAlias("MESSAGEID")
private String messageId; @XStreamAlias("SRC")
private String src; // getter settter
3、Body,明细类集合
class Body
@XStreamImplicit(itemFieldName = "TRANLIST")
private List<Detail> detail;
4、Detail明细类
class Detail
@XStreamConverter(value = XStreamDateConverter.class)
@XStreamAsAttribute
@XStreamAlias("TRAN_DATE")
private Date tranDate; @XStreamAlias("TRAN_TIME")
private String tranTime;
// getter setter
需要强调的是: String类型不需要转换,其他的类型都可以通过实现接口SingleValueConverter来实现转换格式,编写一个转换日期Date格式的转换,其他类似
public class XStreamDateConverter implements SingleValueConverter { private final String YMD = "yyyyMMdd"; SimpleDateFormat dateFormat = new SimpleDateFormat(YMD); @Override
public String toString(Object o) {
String result = null;
if (o instanceof Date) {
Date date = (Date) o;
result = dateFormat.format(date);
}
return result;
} @Override
public Object fromString(String s) {
Date date = null;
if (s != null && !"".equals(s)) {
try {
date = dateFormat.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
}
return date;
} @Override
public boolean canConvert(Class aClass) {
return Date.class == aClass;
}
}
基础工作已经完成,接下来就是将xml转换为对象实体
public static Total transXmlToObject(String xmlBody) {
XStream xStream = new XStream();
xStream.alias("MESSAGE", Total.class);
xStream.alias("MESSAGEHEAD", Head.class);
xStream.alias("MESSAGEBODY", Body.class);
xStream.alias("TRANLIST", Detail.class);
xStream.processAnnotations(new Class[]{Total.class, Head.class, Body.class, Detail.class}); Object object = xStream.fromXML(xmlBody);
Total data = (Total) object;
return data;
}
最新文章
- Ubuntu Linux启用root用户登录
- JSP内置标签 JSP中JavaBean标签 JSP开发模式 EL和JSTL快速入门
- linux创建用户,指定组
- AspNet WebApi : MessageHandler(消息处理器 )
- arm mov 指令
- Razor和HtmlHelper的使用意义
- HttpHelper万能框架V1.6
- npm install 时报错 Unexpected end of input at 1:15930
- OSI七层网络模型
- SCSS &; SASS Color 颜色函数用法
- Go smtp发送邮件,带附件
- Spring Cloud Stream如何处理消息重复消费?
- ASP.NET Web API 2 之文件下载
- 2159 ACM 杭电 杀怪 二维费用的背包+完全背包问题
- mescroll在vue中的应用
- JSP的分页技术
- MinGW编译Mongo-CXX-Driver
- 《linux 字符处理》- grep/sort/uniq/tr/paste
- redhat安装docker
- 37mysql 表操作