Unrecognized token ‘code’: was expecting 解决方案
当redis在Java中使用的时候,碰到序列化的Jackson2JsonRedisSerializer的时候,从redis中取字符串值,一直报错取不出来,但是数字可以取出来,问题就出在了序列化后存储的规范。(错误:Unrecognized token ‘code’: was expecting (JSON String, Number, Array, Object,‘true’, ‘false’
当redis在Java中使用的时候,碰到序列化的Jackson2JsonRedisSerializer的时候,从redis中取字符串值,一直报错取不出来,但是数字可以取出来,问题就出在了序列化后存储的规范。(错误:Unrecognized token ‘code’: was expecting (JSON String, Number, Array, Object,‘true’, ‘false’ or ‘null’) )
通过序列化存到redis中的样子
普通的样子

可以看到是有区别的,所以取值错误,只要通过序列化存值,再取值是不会出错的
我们这里针对StringRedisSerializer,Jackson2JsonRedisSerializer和JdkSerializationRedisSerializer进行测试。
下面是,把3种Serializer保存到Redis中的结果:
1,所有的KeySerializer和HashKeySerializer都使用StringRedisSerializer,用其它Serializer的没有什么意义,就像最上面的例子一样。
2,上面序列化后的值,是保存到redis中的值,从Redis中读取回Java中后,值的内容都是一样的。
从上面的结果不难看出,
1,用StringRedisSerializer进行序列化的值,在Java和Redis中保存的内容是一样的
2,用Jackson2JsonRedisSerializer进行序列化的值,在Redis中保存的内容,比Java中多了一对双引号。
3,用JdkSerializationRedisSerializer进行序列化的值,对于Key-Value的Value来说,是在Redis中是不可读的。对于Hash的Value来说,比Java的内容多了一些字符。
(如果Key的Serializer也用和Value相同的Serializer的话,在Redis中保存的内容和上面Value的差异是一样的,所以我们保存时,只用StringRedisSerializer进行序列化)
看玩点赞哦!
更多推荐