使用XStream进行XML与对象的互相转换时下划线的坑

使用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,"__")

一行搞定,但觉得这种办法毕竟治标不治本,于是翻开源码。
encodeName
双下划线问题的产生是因为XStream默认的转换方式中定义了对特殊字符的转换
Google一番,解决方法很简单,转换的过程中,使用XppDriver中encodeName方法不对特殊字符进行转换就可以了
NoNameCoder
实例化XSteam时改成这样,使用NoNameCoder(),对全部属性不修改即可.

// XStream xStream = new XStream(new DomDriver());
XStream xs = new XStream(new Xpp3Driver(new NoNameCoder()));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值