很多時(shí)候我們不僅要解析json格式的數(shù)據(jù)腾降,xml也是一種很常見(jiàn)的數(shù)據(jù)格式惨恭,很多老的系統(tǒng)都采用的這種方式,我們要與之通訊和交換數(shù)據(jù)就必須做數(shù)據(jù)轉(zhuǎn)換堤框,XStream很方便的實(shí)現(xiàn)了bean和xml的互轉(zhuǎn)罐寨。
以下共享給大家一個(gè)我經(jīng)常用到的一個(gè)方法類:
public class XStreamUtils {
private static String XML_TAG = "<?xml version='1.0' encoding='UTF-8'?>";
// 模板屬性參數(shù)
private static String PROFILE_ID = "profileId";
private static String LOGO_ID = "logoId";
private static String CREATE_TIME = "createTime";
private static String MODIFY_TIME = "modifyTime";
// 任務(wù)屬性參數(shù)
private static String TASK_ID = "taskId";
private static String TASK_DEFAULT_INFO = "taskDefaultInfo";
private static String INPUT_ID = "inputId";
private static String VIDEO_ID = "videoId";
private static String AUDIO_ID = "audioId";
private static String ENCODE_ID = "encodeId";
private static String PARAM_ID = "paramId";
private static String OUTPUT_ID = "outputId";
private static String PRETREAT_ID = "pretreatId";
private static String SHIELD_ID = "shieldId";
/**
* Description: 私有化構(gòu)造
*/
private XStreamUtils() {
super();
}
/**
* @Description 為每次調(diào)用生成一個(gè)XStream
* @Title getInstance
* @return
*/
private static XStream getInstance() {
XStream xStream = new XStream(new DomDriver("UTF-8")) {
/**
* 忽略xml中多余字段
*/
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new MapperWrapper(next) {
@SuppressWarnings("rawtypes")
@Override
public boolean shouldSerializeMember(Class definedIn, String fieldName) {
if (definedIn == Object.class) {
return false;
}
return super.shouldSerializeMember(definedIn, fieldName);
}
};
}
};
// 設(shè)置默認(rèn)的安全校驗(yàn)
XStream.setupDefaultSecurity(xStream);
// 使用本地的類加載器
xStream.setClassLoader(XStreamUtils.class.getClassLoader());
// 允許所有的類進(jìn)行轉(zhuǎn)換
xStream.addPermission(AnyTypePermission.ANY);
return xStream;
}
/**
* @Description 將xml字符串轉(zhuǎn)化為java對(duì)象
* @Title xmlToBean
* @param xml
* @param clazz
* @return
*/
public static <T> T xmlToBean(String xml, Class<T> clazz) {
XStream xStream = getInstance();
xStream.processAnnotations(clazz);
Object object = xStream.fromXML(xml);
T cast = clazz.cast(object);
return cast;
}
/**
* @Description 將xml字符串轉(zhuǎn)化為java對(duì)象
* @Title xmlToBean
* @param file
* @param clazz
* @return
*/
public static Object xmlToBean(File file, Class clazz) {
XStream xStream = getInstance();
xStream.processAnnotations(clazz);
// 忽略未知字段
xStream.ignoreUnknownElements();
Object object = xStream.fromXML(file);
return object;
}
/**
* @Description 將java對(duì)象轉(zhuǎn)化為xml字符串
* @Title beanToXml
* @param object
* @return
*/
public static String beanToXml(Object object, Class clazz) {
XStream xStream = getInstance();
// 忽略對(duì)象參數(shù)
// overLookParam(xStream);
xStream.processAnnotations(clazz);
// 剔除所有tab靡挥、制表符、換行符
// String xml = xStream.toXML(object).replaceAll("\\s+", " ");
String xml = xStream.toXML(object);
return xml;
}
/**
* @Description 將java對(duì)象轉(zhuǎn)化為xml字符串(包含xml頭部信息)
* @Title beanToXml
* @param object
* @return
*/
public static String beanToXmlWithTag(Object object, Class clazz) {
String xml = XML_TAG + "\n" + beanToXml(object, clazz);
return xml;
}
/**
* 被忽略的字段
* @param xStream
*/
private static void overLookParam(XStream xStream) {
/* // 模板參數(shù)
xStream.omitField(ProfileVO.class, PROFILE_ID);
xStream.omitField(ProfileLogo.class, LOGO_ID);
xStream.omitField(ProfileLogo.class, PROFILE_ID);
xStream.omitField(ProfileLogo.class, CREATE_TIME);
xStream.omitField(ProfileLogo.class, MODIFY_TIME);
// 任務(wù)參數(shù)
xStream.omitField(TaskVO.class, TASK_ID);
xStream.omitField(TaskVO.class, TASK_DEFAULT_INFO);
xStream.omitField(TaskInputVO.class, INPUT_ID);
xStream.omitField(TaskInputVO.class, TASK_ID);
xStream.omitField(TaskInputVideo.class, VIDEO_ID);
xStream.omitField(TaskInputVideo.class, INPUT_ID);
xStream.omitField(TaskInputAudio.class, AUDIO_ID);
xStream.omitField(TaskInputAudio.class, INPUT_ID);
xStream.omitField(TaskEncodeVO.class, ENCODE_ID);
xStream.omitField(TaskEncodeVO.class, TASK_ID);
xStream.omitField(TaskEncodeParam.class, PARAM_ID);
xStream.omitField(TaskEncodeParam.class, ENCODE_ID);
xStream.omitField(TaskEncodeParam.class, CREATE_TIME);
xStream.omitField(TaskEncodeParam.class, MODIFY_TIME);
xStream.omitField(TaskEncodeLogo.class, LOGO_ID);
xStream.omitField(TaskEncodeLogo.class, ENCODE_ID);
xStream.omitField(TaskEncodeLogo.class, CREATE_TIME);
xStream.omitField(TaskEncodeLogo.class, MODIFY_TIME);
xStream.omitField(TaskOutput.class, OUTPUT_ID);
xStream.omitField(TaskOutput.class, ENCODE_ID);
xStream.omitField(TaskOutput.class, CREATE_TIME);
xStream.omitField(TaskOutput.class, MODIFY_TIME);
xStream.omitField(TaskPretreat.class, PRETREAT_ID);
xStream.omitField(TaskPretreat.class, TASK_ID);
xStream.omitField(TaskShield.class, SHIELD_ID);
xStream.omitField(TaskShield.class, TASK_ID);*/
}
}
更多鸯绿,請(qǐng)關(guān)注:
springboot 技術(shù)實(shí)踐總結(jié)