fastjson GenericFastJsonRedisSerializer默认缺少Binary类型

yrwegjxp  于 2021-11-27  发布在  Java
关注(0)|答案(2)|浏览(700)

使用GenericFastJsonRedisSerializer作为Redis的序列化工具时,在第一次deserialize时,针对Binary类型的数据会抛出异常:
Could not deserialize: autoType is not support. org.bson.types.Binary; nested exception is com.alibaba.fastjson.JSONException: autoType is not support. org.bson.types.Binary
第二次再执行deserialize的时候就可以正常反序列化了。
经测试是因为第一次执行反序列化时TypeUrils中的mappings中缺少Binary类,第二次去获取的时候才会获取到(不知是什么时候添加进去的)。

反序列化时会在这里获取Binary类

7vhp5slm

7vhp5slm1#

看起来是个bug,你能否尝试修复一下?

hpxqektj

hpxqektj2#

这个问题我后来专门看了下,其实可以不认为是bug,只能说是我的使用场景比较独特。
一般情况下,使用GenericFastJsonRedisSerializer是先调用serialize的功能,往缓存里写数据,然后调用deserialize功能,从缓存里反序列化出写入的数据。这样在序列化时会知道写入了什么类型的数据,并把这个数据的类型支持添加到mapper中,这样使用是没有问题的。
但是我在调试时是在写入了缓存数据后直接restart了程序,所以这时mapper中没有添加特定的数据类型,而缓存里却已经有了数据,这样去deserialize的时候就会找不到相应的类型。针对这种场景除非预先把所有支持的数据类型全部添加到mapper中,否则总会遇到失败的情况;而这种操作花费太多,得不偿失,所以也不好修复。

相关问题