fastjson spring-data-redis使用FastJsonRedisSerializer反序列化转换异常

yx2lnoni  于 2021-11-27  发布在  Java
关注(0)|答案(9)|浏览(847)

fastjson版本1.2.51
spring-data-redis版本2.1.0RELEASE
我是这样初始化:

然后注入 存进redis

然后反序列化读取的时候就转换异常了

从redis看存储的json数据好像是没问题的:

网上看到以前的版本别人会手动写一个FastJsonRedisSerializer的serialize和deserialize,但是我看现在已经存在这两个方法了,想着是不是就能直接用了。序列化的差别好像就是 #2060
提到的。在别人的回复 #2083 (comment) 里面提到"FastJsonRedisSerializer反序列化过来对象为JSONObject,建议你自己再转换一次",
但是反序列化的方法不是已经有泛型了?为什么还要再重复的转换一次呢?官方都没有好的解决方案吗?

nwwlzxa7

nwwlzxa71#

获取列表数据带泛型是ok的 可以直接转成对象

pgky5nke

pgky5nke2#

上面序列化后出现@type是因为我用网上的方法手动实现了serialize和deserialize方法
如果用fastjson默认的方法的话 序列化后是没有这个@type的。

测试了几次 好像用GenericFastJsonRedisSerializer可以正常序列化跟反序列化 会把@type写入。但是格式上不如GenericJackson2JsonRedisSerializer,有class类型 字段也是有序的。GenericFastJsonRedisSerializer如果有Double类型的字段的话 序列化后不能按照json格式化,因为数字后有D。但是不影响反序列化。

yiytaume

yiytaume3#

@lihengming 帮忙看一下

ymdaylpp

ymdaylpp4#

@DreamXiao see https://github.com/alibaba/fastjson/wiki/%E5%9C%A8-Spring-%E4%B8%AD%E9%9B%86%E6%88%90-Fastjson#%E5%9C%A8-spring-data-redis-%E4%B8%AD%E9%9B%86%E6%88%90-fastjson

o0lyfsai

o0lyfsai5#

@VictorZeng 是这样配置没错的 你也可以看到我的代码截图 具体几种不同的序列化后的字符串在上面评论我也提供了

lqfhib0f

lqfhib0f6#

@DreamXiao “通常使用 GenericFastJsonRedisSerializer 即可满足大部分场景,如果你想定义特定类型专用的 RedisTemplate 可以使用 FastJsonRedisSerializer 来代替 GenericFastJsonRedisSerializer” 也就是说GenericFastJsonRedisSerializer 可以自动转换对象类型,FastJsonRedisSerializer 需要自定义转换需要的类型。

5sxhfpxr

5sxhfpxr7#

@VictorZeng 嗯嗯谢谢 看起来格式化后还是GenericJackson2JsonRedisSerializer舒服 不过可能fastjson性能会更优于GenericJackson2JsonRedisSerializer吧。

niwlg2el

niwlg2el9#

完美解决。谢谢了

相关问题