使用XStream进行XML与对象的互相转换时下划线的坑
bean转xml方法
/**
* 准备XStream工具
* 将JavaBean转换成Xml
* @return XMl
*/
public static String beanToXmlStr(Object nodes) {
XStream xStream = new XStream(new DomDriver());
String xmlStr = "<?xml version=\"1.0\" encoding=\"gb2312\"?>\n";
//设置别名
xStream.alias("RECORDS", List.class);
try {
xStream.alias("RECORD", Class.forName(nodes.getClass().getName()));
} catch (ClassNotFoundException e) {
logger.error("", e);
}
//生成xml字符串
xmlStr += xStream.toXML(nodes);
logger.error(xmlStr);
return xmlStr;
}
在bean转xml,对象中有个字段名为HANDER_DEPTID在使用XStram转化为XML字符串后神奇的变成了HANDER__DEPTID
xStream.aliasField("HANDER_DEPTID",XXXX.class,"HANDER_DEPTID");
然而并没什么用,想着使用repalce方法可以解决
StringUtils.replace("_",param,"__")
一行搞定,但觉得这种办法毕竟治标不治本,于是翻开源码。
双下划线问题的产生是因为XStream默认的转换方式中定义了对特殊字符的转换
Google一番,解决方法很简单,转换的过程中,使用XppDriver中encodeName方法不对特殊字符进行转换就可以了
实例化XSteam时改成这样,使用NoNameCoder(),对全部属性不修改即可.
// XStream xStream = new XStream(new DomDriver());
XStream xs = new XStream(new Xpp3Driver(new NoNameCoder()));