Hessian不能正确序列化和反序列化BigDecimal的解决

某次往Redis里面缓存对象,发现取出的对象里面,BigDecimal属性全都变成了0。后发现问题出在使用的序列化、反序列化的工具Hessian上面。

Hessian的这个问题,从网上搜索,可以说是一大堆。看到早期的解决方案是在jar包的META-INF目录里面新建hessian目录,并填入两个配置文件,告诉Hessian,类的转换关系。

但是现在大家都用maven等构建工具构建项目,这个办法就没意义了,因为你不可能把maven服务器上的jar包修改了,只能看官方的修复。 可这个问题在官方的BUG列表里面,http://bugs.caucho.com/view.php?id=3920 提交从10年被提交,最后16年还有人问为啥没修复,甚至现在9102年了,还是new状态。真是没辙了。

更加奇葩的是已经有人确认,4.0.37版修复了这个问题(不知道为啥没更新BUG列表),将两个配置文件放了进去,但是到了后面的版本不知道为啥,文件没了,BUG重新回来了。

截止到写这篇文章,我只能确认19年2月发布的4.0.60版本是携带着两个配置文件的,可以正常序列化。而列表里面上一个版本的4.0.51(17年3月)就没有。至于51-60之间的版本哪里去了,不知道。4.0.7(10年,也就是这版有人说这个问题)到4.0.51,为啥7年间的版本全看不到,也不知道。

大家如果在使用Hessian的过程中发现序列化反序列化问题,请选择存在配置文件的版本,大概率就修复了。 最后附上配置文件内容

deserializers:

java.io.File=com.caucho.hessian.io.FileDeserializer
java.math.BigDecimal=com.caucho.hessian.io.BigDecimalDeserializer
javax.management.ObjectName=com.caucho.hessian.io.ObjectNameDeserializer

serializers:

com.caucho.hessian.io.HessianRemoteObject=com.caucho.hessian.io.RemoteSerializer
com.caucho.burlap.io.BurlapRemoteObject=com.caucho.hessian.io.RemoteSerializer
java.io.File=com.caucho.hessian.io.StringValueSerializer
java.math.BigDecimal=com.caucho.hessian.io.StringValueSerializer
java.util.Locale=com.caucho.hessian.io.LocaleSerializer
javax.management.ObjectName=com.caucho.hessian.io.StringValueSerializer

 

转载于:https://my.oschina.net/wlmouse/blog/3053308

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值