GenericJackson2JsonRedisSerializer 序列化会存在多余的双引号,怎么解决?

2021-12-01 17:52:26 +08:00
 JasonLaw

RedisTemplate 如下:

@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
    redisTemplate.setConnectionFactory(connectionFactory);
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    ObjectMapper objectMapper = new ObjectMapper();
    PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder()
                                                                .allowIfSubType(Object.class)
                                                                .build();
    objectMapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL);
    redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer(objectMapper));
    return redisTemplate;
}

执行以下代码后

redisTemplate.opsForValue()
             .set("k", "v");

get k 的结果如下,会有多余的双引号,要怎么解决呢?只能使用 StringRedisSerializer 吗?

1104 次点击
所在节点    程序员
5 条回复
chendy
2021-12-01 18:37:02 +08:00
json 里的字符串带引号
所以按照 json 格式序列化字符串也带引号
只要字符串的话 StringRedisSerializer 就够用了
JasonLaw
2021-12-01 18:41:52 +08:00
@chendy #1 代码里面执行系列化和反序列化?相当于使用 RedisTemplate<String, String>,而不是 RedisTemplate<String, Object>?
billly
2021-12-02 09:29:56 +08:00
json 就是这样的啊,只要它能正确反序列化,也没什么问题吧
gadfly3173
2021-12-02 17:44:59 +08:00
这个算是 GenericJackson2JsonRedisSerializer 的缺陷,也可以说是妥协。因为这个序列化类是用来处理 json 的,也就是[]{}之类的,突然冒出来个无法识别的东西,又不知道它是不是真的是字符串,所以使用双引号来表示这个值确实是字符串。觉得这样不能接受的话,就在你能确定结果一定是字符串的地方用 StringRedisTemplate 就行了。
JasonLaw
2021-12-07 21:55:31 +08:00
@chendy #1
@billly #3
@gadfly3173 #4

我通过 extends GenericJackson2JsonRedisSerializer ,然后 redisTemplate.setValueSerializer(new CustomGenericJackson2JsonRedisSerializer());解决了这个问题。详细见附言。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/819354

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX