Xstream处理null值

最近使用Xstream来实现java对象转xml文件,然后由于要处理键值对,就重新写了转换器。对canConvert(),marshal(),unmarshal()三个方法重写,这三个方法作用分别是:

canConvert():用来判断需要序列化的对象是否使用此转换器,用户可以在此方法自定义使用的类,或者可以直接返回true来表名此转换器为通用。xstream会自动执行此方法,如果canConvert()的返回结果为false,转换器将不起作用。
marshal():序列化,对于java对象转换成xml文件的自定义序列化操作将会执行此方法。方法含有三个参数,分别是:需要转换的对象、序列化输出对象和序列化上下文对象。
unmarshal():反序列化,对于xml文件转换成java对象是需要执行的方法。方法含有两个参数,分别是:反序列化读取对象和反序列化上下文对象。
(此处,借鉴于[https://blog.csdn.net/qb170217/article/details/81867679])

在重写marshal()方法时,出现null值问题处理。在实例类中的字段根据注解@XStreamConverter来区分是否需要走转换器。未走转换器字段如果出现空值在xml中以如下格式生成:

<GenderCode></GenderCode>

但是走转换器后的非空值,我生成如下格式:

<GenderCode version="1.0" value="2"></GenderCode>

实现代码是

writer.addAttribute("version", "1.0");        
writer.addAttribute("value", value);           
writer.setValue(Name);

但是空值走转换器得到的xml格式是

</GenderCode>

以下是我解决该问题方法,因为存在空值,我做非空判断,只在有值的情况下走了setValue(),只需要把这句话移出来,在空值情况同样set一个空就行,以下为原代码:

if (!"".equals(name)) {
    writer.addAttribute("version", "1.0");
    writer.addAttribute("value", value);
 }
writer.setValue(name);

问题个例仅供参考,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值