fastJSON序列化对象成字符串后,存入redis有反斜杠问题解决过程。 | 您所在的位置:网站首页 › json字符串转义斜杠 › fastJSON序列化对象成字符串后,存入redis有反斜杠问题解决过程。 |
如题: 序列化对象代码如下: AccountAdminEntity accountAdminEntity = getInfoById(DB3, ADMIN_KEY, getBaseMapper(), AccountAdminEntity.class, accountId); if (accountAdminEntity != null) { //写入redis try { String json = JSON.toJSONString(accountAdminEntity); redisUtil.hmSet(ADMIN_KEY,String.valueOf(accountId),json); } catch (Exception e) { log.info("redis调用失败,异常原因:{}",e.getMessage()); } }很简单的redis使用,查询的时候先查redis,没有就查数据库,然后写入redis。 这里使用JSON.toJSONString将java对象序列化成字符串。 Redis的配置:RedisConfig @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 自定义的string序列化器和fastjson序列化器 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // jackson 序列化器 GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); // kv 序列化 redisTemplate.setKeySerializer(stringRedisSerializer); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer ); // hash 序列化 redisTemplate.setHashKeySerializer(stringRedisSerializer); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer ); redisTemplate.afterPropertiesSet(); return redisTemplate; }通过postman测试接口,然后通过redis-client的桌面工具查看redis中的数据,发现如下: 如图所示,发现有大量的反斜杠\。 其实,作为java字符串,这种结构是正常的,因为json格式的key用标准来讲就是双引号包裹,用String字符串表示的话肯定有" 来进行转义。 在功能上其实是没有影响的,可以进行序列化和反序列化都没问题。 重点来了,偏偏领导看到这种数据,表示非常不喜欢这种反斜杠,表示一定要去掉。 于是尝试修改。 使用jackson的objectMapper或者是 fastJson的SerializerFeature属性进行序列化时格式化,也没有什么作用。 最后,尝试将redisConfig的value的序列化使用fastJSON解决了这个问题。 也就是修改这个: 小结: 究其原因,暂时没有去做深入研究,估计是因为代码里序列化对象和写入redis时的序列化的类不一样,代码里用的fastJSON,而redisConfig配置redisTemplate又是用jackson去写入value,就可能会有这个问题。 |
CopyRight 2018-2019 实验室设备网 版权所有 |