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

Stella981
• 阅读 1087

某次往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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Dubbo协议及序列化
Dubbo是Alibaba开源的分布式服务框架远程调用框架,在网络间传输数据,就需要通信协议和序列化。一通信协议Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议,但是Dubbo官网是推荐我们使用Dubbo协议的,默认也是用的dubbo协议。先介绍几种常见的协议:1\.
Wesley13 Wesley13
3年前
DUBBO 源码解析(二) 服务的发布
1\.序列化出现UnsupportedOperationExceptionCausedby:com.alibaba.dubbo.remoting.RemotingException:java.lang.UnsupportedOperationException:com.alibaba.com.caucho.hessian.io
Wesley13 Wesley13
3年前
spring 4.0.3整合Hessian4.0.38 IDEA
1.1Hessian简介Hessian是一个轻量级的remotingonhttp工具,使用简单的方法提供了RMI的功能。相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。1.2整合对于Hessian是分服务端和客户端的,网上的一些例子也是大部分分开的(S
Stella981 Stella981
3年前
Dubbo序列化概述
微信公众号:\中间件兴趣圈\作者简介:《RocketMQ技术内幕》作者Dubbo序列化支持java、compactedjava、nativejava、fastjson、fst、hessian2、kryo,其中默认hessian2。其中java、compactedjava、nativejava属于原生java的序列化。整个Du
Wesley13 Wesley13
3年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这