在与运营商调试接口时遇到了这个坑,对象中有个字段名为other_order_no在使用XStram转化为XML字符串后神奇的变成了other__order__no导致鉴权失败,几番调试之后才发现这个问题,虽没有浪费太多时间,但也着实让人着急了一把。
于是很自然的使用aliasField接口更改字段名
xStream.aliasField("other_order_no",XXXX.class,"other_order_no");
然而并没什么卵用,当时时间紧,任务重,想都没想就直接拿出字符串repalce大法
StringUtils.replace("_",param,"__")
一行搞定,但心里却觉得这种办法毕竟治标不治本,XStream开发的大神怎么可能会犯这种低级错误,更何况Jar包已经迭代了好几个版本,事后带着疑问翻开源码。
双下划线问题的产生是因为XStream默认的转换方式中定义了对特殊字符的转换
Google一番,解决方法很简单,转换的过程中,使用XppDriver中encodeName方法不对特殊字符进行转换就可以了
NoNameCoder.png
实例化XSteam时改成这样,使用NoNameCoder(),对全部属性不修改即可.
XStream xs = new XStream(new Xpp3Driver(new NoNameCoder()));
技术讨论 & 疑问建议 & 个人博客
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议,转载请注明出处!
网友评论