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

浙公网安备 33010602011771号