xstream解析xml报文

jar包

<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.9</version>
</dependency>

工具类

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;
import com.thoughtworks.xstream.mapper.MapperWrapper;


import java.io.InputStream;

/**
* xml解析工具类
* azj
* 2021-12-31
*/
public class XmlUtils {
  //xml转java对象
public static Object xml2Object(String inputXml, Class<?> type) throws Exception {
if (null == inputXml || "".equals(inputXml)) {
return null;
}
     //解决单下划线转双下划线
XStream xstream = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_"))){
       //xml只映射对象中有的属性
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new MapperWrapper(next) {
@Override
public boolean shouldSerializeMember(Class definedIn, String fieldName) {
if(definedIn == Object.class){
return false;
}
return super.shouldSerializeMember(definedIn, fieldName);
}
};
}
};
xstream.processAnnotations(type);
return xstream.fromXML(inputXml);
}

/**
* 对象转xml
*/
public static String object2Xml(Object ro, Class<?> types) throws Exception {
if (null == ro) {
return null;
}
XStream xstream = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_")));
xstream.alias("xml", types);
return xstream.toXML(ro);
}
}

实体

@XStreamAlias("FFMFLT")//根节点
public class Students {
@XStreamAlias("ppw")//对象或属性
private Ppw ppw;
@XStreamImplicit(itemFieldName = "ten")//多节点
private List<Ten> list;
}
@XStreamAlias("ppw")
public class Ppw {
@XStreamAlias("AIRLINEID")
private String firstname;
@XStreamAlias("FLIGHTNO")
private String lastname;
@XStreamAlias("FLIGHT_DATE")
private String aa;
@XStreamAlias("SAIRPORT")
private String qq;
@XStreamAlias("EAIRPORT")
private String bb;
@XStreamAlias("REG")
private String cc;
}
@XStreamAlias("ten")
public class Ten {
@XStreamAlias("oo")
private String oo;
}

xml报文 --不映射<yyy>

<FFMFLT>
  <ppw>
    <AIRLINEID>ZH</AIRLINEID>
    <FLIGHTNO>9674</FLIGHTNO>
    <FLIGHT_DATE>2021-12-21</FLIGHT_DATE>
    <SAIRPORT>HRB</SAIRPORT>
    <EAIRPORT>CAN</EAIRPORT>
    <REG>1685</REG>
  </ppw>
  <yyy>
    <ii>qqq</ii>
  </yyy>
  <yyy>
    <ii>rrr</ii>
  </yyy>
  <yyy>
    <ii>www</ii>
  </yyy>
  <ten>
    <oo>1</oo>
  </ten>
  <ten>
    <oo>2</oo>
  </ten>
  <ten>
    <oo>3</oo>
  </ten>
  <ten>
    <oo>4</oo>
  </ten>
</FFMFLT>

参考文献:https://www.cnblogs.com/javallh/p/10477185.html

 


posted @ 2021-12-31 17:01  客至在水一方  阅读(346)  评论(0)    收藏  举报