fastjson版本1.2.51
spring-data-redis版本2.1.0RELEASE
我是这样初始化:
然后注入 存进redis
然后反序列化读取的时候就转换异常了
从redis看存储的json数据好像是没问题的:
网上看到以前的版本别人会手动写一个FastJsonRedisSerializer的serialize和deserialize,但是我看现在已经存在这两个方法了,想着是不是就能直接用了。序列化的差别好像就是 #2060
提到的。在别人的回复 #2083 (comment) 里面提到"FastJsonRedisSerializer反序列化过来对象为JSONObject,建议你自己再转换一次",
但是反序列化的方法不是已经有泛型了?为什么还要再重复的转换一次呢?官方都没有好的解决方案吗?
9条答案
按热度按时间nwwlzxa71#
获取列表数据带泛型是ok的 可以直接转成对象
pgky5nke2#
上面序列化后出现@type是因为我用网上的方法手动实现了serialize和deserialize方法
如果用fastjson默认的方法的话 序列化后是没有这个@type的。
测试了几次 好像用GenericFastJsonRedisSerializer可以正常序列化跟反序列化 会把@type写入。但是格式上不如GenericJackson2JsonRedisSerializer,有class类型 字段也是有序的。GenericFastJsonRedisSerializer如果有Double类型的字段的话 序列化后不能按照json格式化,因为数字后有D。但是不影响反序列化。
yiytaume3#
@lihengming 帮忙看一下
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
o0lyfsai5#
@VictorZeng 是这样配置没错的 你也可以看到我的代码截图 具体几种不同的序列化后的字符串在上面评论我也提供了
lqfhib0f6#
@DreamXiao “通常使用 GenericFastJsonRedisSerializer 即可满足大部分场景,如果你想定义特定类型专用的 RedisTemplate 可以使用 FastJsonRedisSerializer 来代替 GenericFastJsonRedisSerializer” 也就是说
GenericFastJsonRedisSerializer
可以自动转换对象类型,FastJsonRedisSerializer
需要自定义转换需要的类型。5sxhfpxr7#
@VictorZeng 嗯嗯谢谢 看起来格式化后还是GenericJackson2JsonRedisSerializer舒服 不过可能fastjson性能会更优于GenericJackson2JsonRedisSerializer吧。
rlcwz9us8#
fixed by #2153
niwlg2el9#
完美解决。谢谢了