SpringBoot整合Redis并使用redisTemplate操作Redis出现的坑

本文介绍了在SpringBoot项目中整合Redis并使用redisTemplate操作时遇到的ClassCastException问题。通过设置序列化规则,尝试了enableDefaultTyping()以及更换JacksonJsonRedisSerializer为GenericJackson2JsonRedisSerializer,解决了value序列化问题。然而,当涉及到Spring Cache时,仍出现转换异常。为了解决这个问题,自定义了Value和Key的序列化方式,分别使用FastJson和自定义空判断。最后,将自定义的序列化配置到redisTemplate中,并注意别名的使用,确保成功注入并避免错误。测试后,所有操作均能正常运行。
摘要由CSDN通过智能技术生成

使用redisTemplate.opsForValue().set() 将数据放入缓存的时候,因为我设置了序列化格式为json,使用的

Jackson2JsonRedisSerializer

来实现的value序列化,但有一个问题就是,如果你没有指定类型,取出来的时候会变为LinkedHashMap ,然后报:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to xxx

面向百度编程一番之后,找到解决方案如下,指定一下序列化规则:

ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);

enableDefaultTyping() 虽然提示过时,但也不影响嘛,重启后测试,还是不行,emmm想了想也不知道问题在哪里,直到看到一篇博客:https://blog.csdn.net/u010180738/article/details/79383246

 

里面有一句话:JacksonJsonRedisSerializer和GenericJackson2JsonRedisSerializer,两者都能系列化成json,但是后者会在json中加入@class属性,类的全路径包名,方便反系列化。

 

我就想能不能换成GenericJackson2JsonRedisSerializer呢,更改代码:

/**
     * 配置Redis规则
     *
     * @param redisConnectionFactory RedisConnectionFactory
     * @return RedisTemplate
     */
    &
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值