1、首先根据xml文件返回的格式,按照层级建立相应的实体类,xml文件格式如下:
这是从第三方接口拿到的整体的一个返回格式。呢相应的最外层也就是<track></track>, 下一层也就是<link_statistic></link_statistic>,依次类推即可。
2、实体类的创建如下:
=》这是最外层实体类
@XmlRootElement(name = "track")
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class TrackEntity {
@XmlElement(name = "track_id")
private String track_id;//跟踪统计id
//中间省略了,自行补充......
@XmlElement(name = "click_ratio")
private String click_ratio;//点击率
//下面这段代码是要关联你xml文件下一层级的
@XmlElements({@XmlElement(name="link_statistic")})
private String link_statistic;
}
=》下一层如下:
@XmlRootElement(name = "link_statistic")
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class LinkStatistic {
@XmlElements({@XmlElement(name="link")})
private List<Link> link;
}
=》最后一层:
@XmlRootElement(name = "link")
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class Link {
@XmlElement(name = "link_id")
private String link_id;//链接 id
//中间省略,自行补充。。。。
@XmlElement(name = "click_last")
private String click_ratio;//最后点击时间
}
3、最重要的工具类如下:
package com.unilog.meishe.util;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.Reader;
import java.io.StringReader;
public class XmlBuilder {
/**
* 将XML转为指定的POJO
* @param clazz
* @param xmlStr
* @return
* @throws Exception
*/
public static Object xmlStrToOject(Class<?> clazz, String xmlStr) throws Exception {
Object xmlObject = null;
Reader reader = null;
JAXBContext context = JAXBContext.newInstance(clazz);
// XML 转为对象的接口
Unmarshaller unmarshaller = context.createUnmarshaller();
reader = new StringReader(xmlStr);
xmlObject = unmarshaller.unmarshal(reader);
if (null != reader) {
reader.close();
}
return xmlObject;
}
4、调用方式附上:
public static void main(String[] args) {
try {
//调用的第一个参数为:实体类本身
//第二个参数为:对应的xml文件格式
TrackEntity trackEntity =
(TrackEntity) XmlBuilder.xmlStrToOject(TrackEntity.class,getTrack());
System.out.println(trackEntity);
} catch (Exception e) {
e.printStackTrace();
}
}
最后说明一下,这只是我现在使用的方法,我相信还有比我这个更简便的。
好了,本片文章到此结束,再见!