RedisTemplate序列化存储的数据包含转移字符导致json转对象失败j
在项⽬中中使⽤RedisTemplate序列化对象存储时,将转义字符""也存到redis⾥⾯,再次取出时,转成对象失败。据同事说是序列化⽅式不⼀致导致的。在此记录⼀下,也感谢⼀下同事的帮助。
在此之前看⼀下存⼊的代码:
List<String> listData =//数据;
SessionCallback callback =new SessionCallback(){
@Override
public Object execute(RedisOperations operations)throws DataAccessException {
operations.multi();
operations.boundHashOps(getAllMapeKey()).putAll(mapData); operations.boundListOps(geAlltKey()).leftPushAll(array);
();
}
};
try{
notificationMapCurrent.clear();
}catch(Exception e){
<("保存数据⾄redis失败,", e);
}
这样
执⾏之后保存到redis⾥⾯的数据是
"{\"infoIds\":\"220191216210101161250616126\",\"Time\":1576501218000}"
这样的数据取出来时的string就保持了原样,
使⽤⼀下⽅式获取:
@Autowired
private RedisTemplate<String,String> redisTemplate;
BoundHashOperations<String, String, String> boundHashOperations = redisTemplate.boundHashOps(getAllMapeKey());
将去到的string数据转换为对象,就会导致直接转换成json是报错:
com.alibaba.fastjson.JSONException: syntax error, expect {, actual string, pos 0, fastjson-version 1.2.62
但是,如果使⽤的是StringRedisTemplate就可以。
执⾏之后保存到redis⾥⾯的数据是:
{"infoIds":"220191216210101161250616126","Time":1576501218000}"
⾄于原因可能是,RedisTemplate和StringRedisTemplate序列化范式不⼀样导致的:
json转换对象RedisTemplate使⽤的是 JdkSerializationRedisSerializer 序列化对象,可以⽤来存储对象,但是要实现Serializable接⼝。
StringRedisTemplate使⽤的是 StringRedisSerializer 序列化String,StringRedisTemplate 主要⽤来存储字符
串,StringRedisSerializer的泛型指定的是String。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论