fastJSON序列化对象成字符串后,存入redis有反斜杠问题解决过程。 您所在的位置:网站首页 json字符串转义斜杠 fastJSON序列化对象成字符串后,存入redis有反斜杠问题解决过程。

fastJSON序列化对象成字符串后,存入redis有反斜杠问题解决过程。

2023-10-28 07:50| 来源: 网络整理| 查看: 265

如题:

序列化对象代码如下:

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 实验室设备网 版权所有