配置redisTemplate序列化,解决乱码与反序列化失败

这篇具有很好参考价值的文章主要介绍了配置redisTemplate序列化,解决乱码与反序列化失败。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

/**
 * @projectName: MultiModuleDemo
 * @package: com.example.config
 * @className: RedisConfig
 * @description: TODO(配置RedisTemplate序列化)
 * @date: 2023/12/18 21:08
 * @version: 1.0
 */
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory){
        RedisTemplate<Object, Object> redis = new RedisTemplate<>();
        redis.setConnectionFactory(factory);
        redis.setKeySerializer(new StringRedisSerializer());
//        redis.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
        //解决转换异常问题  java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to LoginUser
        redis.setValueSerializer(valueSerializer());
        redis.afterPropertiesSet();
        return redis;
    }

    /**
     * @return RedisSerializer<Object>
     * @author ccx
     * @description TODO 解决查询缓存转换异常的问题,设置这个在反序列化时就不会报错
     *  redis在存储进行序列化时,会将类中所有具有返回值的方法进行序列化
     *  但是在读取进行反序列化时是根据set方法实现的,所以在类中当有非set方法有返回值是反序列化就会出错
     *  这个问题是在反序列化LoginUser类时发现的,在JwtTokenFilter过滤器从redis读取用户时
     *  因为LoginUser类实现了UserDetail,重写了一些isXXX方法,这些方法具有boolean返回值,但没有set方法,所以在序列化时会把值写进去,但反序列化时因为没有set方法又不能正常反序列化所以报错了
     * @date 2024/1/3 23:23
     */
    private RedisSerializer<Object> valueSerializer(){
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        //setVisibility用于设置序列化和反序列化时的访问级别
            //JsonAutoDetect.Visibility.ANY:any表示任务可见属性都将被序列化和反序列化;还有PUBLIC_ONLY:只有public属性将被序列化和反序列化;等等
        objectMapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);
        //序列化时会带上类全名,这样在反序列化时就能成功了,现在enableDefaultTyping方法弃用了,应该换成activateDefaultTyping
//        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
        //反序列化时,遇到未知属性会不会报错,true - 遇到没有的属性就报错 false - 没有的属性不会管,不会报错
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        serializer.setObjectMapper(objectMapper);
        return serializer;
    }
}

文章来源地址https://www.toymoban.com/news/detail-791635.html

到了这里,关于配置redisTemplate序列化,解决乱码与反序列化失败的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 4.4. 对象序列化与反序列化

    在本节中,我们将详细讨论Java中的对象序列化与反序列化概念、使用方法以及实例。对象序列化是将对象的状态信息转换为字节流的过程,而反序列化则相反,是将字节流恢复为对象的过程。 4.4.1 为什么需要对象序列化? 对象序列化的主要目的是为了在不同的系统间传输对

    2024年02月07日
    浏览(19)
  • Flutter笔记:序列化与反序列化

    Flutter笔记 序列化与反序列化 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/133340592 序列化是一种将复杂数据结构(例如对象、数组、字典等)转换为线性格式或字节流的过程,以便于数据的存储

    2024年02月07日
    浏览(16)
  • 【计算机网络】序列化与反序列化

    通过打包的方式,将结构体message发送给对方 对方收到后就会报告给上层QQ客户端 结构化的数据 是由 多个 string 构成的 而以前在网络套接字 发送时,都是按照一个字符串的方式来发送和接收的 所以想办法 ,把多个字符串 转化为 一个大\\\"字符串\\\",对方在接收时也是一个长的

    2024年02月10日
    浏览(13)
  • 深入探究序列化与反序列化:原理、应用和最佳实践

    序列化 (Serialization)是指将对象转化为字节流的过程,以便于存储或通过网络进行传输。 反序列化 (Deserialization)则是将字节流转化为对象的过程,恢复原始对象的状态。 在计算机科学中,序列化和反序列化是常用的数据处理技术,用于在不同系统、不同编程语言之间传

    2024年02月08日
    浏览(15)
  • 【Java 基础篇】Java序列化与反序列化详解

    在Java中,序列化和反序列化是一种将对象转换为字节流和将字节流转换为对象的机制。通过序列化,可以将对象存储到文件中、传输到网络上,或者在分布式系统中进行对象的传递。本文将详细介绍Java序列化和反序列化的原理、使用方法和常见应用场景,并提供一些示例代

    2024年02月09日
    浏览(10)
  • JSON序列化与反序列化NULL值丢失问题

    做项目一般都会有一些特殊的需求,例如保留json中的null值,但是fastjson都会把null值得属性给过滤掉 json序列化保留null值 json反序列化保留null值 使用hutool的Json工具时

    2024年02月15日
    浏览(15)
  • 使用nlohmann json库进行序列化与反序列化

    nlohmann源码仓库:https://github.com/nlohmann/json 使用方式:将其nlohmann文件夹加入,包含其头文件json.hpp即可 demo

    2024年02月10日
    浏览(11)
  • 【网络编程】协议定制+Json序列化与反序列化

    需要云服务器等云产品来学习Linux的同学可以移步/--腾讯云--/--阿里云--/--华为云--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。   目录 一、序列化与反序列化的概念 二、自定义协议设计一个网络计算器 2.1TCP协议,如何保证接收方收到了完整的报文呢?

    2024年02月06日
    浏览(26)
  • Java安全基础之Java序列化与反序列化

    目录 ObjectInputStream 和 ObjectOutputStream java.io.Serializable 自定义序列化和反序列化 Java 的序列化(Serialization)是指将对象转换为字节序列的过程,而反序列化(Deserialization)则是将字节序列转换回对象的过程。 序列化和反序列化通常用于在网络上传输对象或者将对象持久化到文

    2024年04月22日
    浏览(13)
  • Leetcode 297. 二叉树的序列化与反序列化

    297. 二叉树的序列化与反序列化

    2024年02月07日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包