当前位置: 首页 > news >正文

配置自定义RedisTemplate 解决redis序列化java8 LocalDateTime

目录

配置自定义RedisTemplate 

引入依赖

配置连接redis

编写测试类

出现问题

配置序列化

解决redis序列化java8 LocalDateTime

问题背景

问题描述

问题分析

解决方案一(全局)

解决方案二(单个字段)


配置自定义RedisTemplate 

引入依赖

<!-- redis -->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.6.4</version>
</dependency>

配置连接redis

spring:redis: #配置redis连接host: 192.168.88.188port: 6379database: 0

编写测试类

然后就是写一个测试类,测一下Redis引入之后是否能过正常使用。新建文件RedisTest.java.

@RunWith(SpringRunner.class)
@SpringBootTest("com.jiamian.xxxxx")
public class RedisTest {@ResourceRedisTemplate redisTemplate;@Testpublic void test(){//操作string类型的 操作对象ValueOperations valueOperations = redisTemplate.opsForValue();//增valueOperations.set("jiamian_string","str123");valueOperations.set("jiamian_Integer",1);valueOperations.set("jiamian_Double",2.0);User user = new User();user.setId(0L);user.setUsername("加棉");valueOperations.set("jiamian_User",user);//查Object jiamian_string = valueOperations.get("jiamian_string");Object jiamian_Integer = valueOperations.get("jiamian_Integer");Object jiamian_Double = valueOperations.get("jiamian_Double");Object jiamian_User = valueOperations.get("jiamian_User");System.out.println(jiamian_string);System.out.println(jiamian_Integer);System.out.println(jiamian_Double);System.out.println(jiamian_User);}
}

出现问题

去redis-cli客户端中查看发现存入的key和我们想象中的不同,这里的序列编码有问题。这是因为RedisTemplate默认使用了jdk序列化器。

如果操作的key和value都是string类型,可以使用StringRedisTemplate进行操作。

StringTemplate部分源码如下:

配置序列化

因为我们这里存的值有多种类型,我们就使用自定义的序列化器

@Configuration
public class RedisTemplateConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {//创建RedisTemplate对象RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();//设置连接工厂redisTemplate.setConnectionFactory(connectionFactory);//设置Key的序列化redisTemplate.setKeySerializer(RedisSerializer.string());//创建Json序列化工具GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();//设置Value的序列化redisTemplate.setValueSerializer(jsonRedisSerializer);return redisTemplate;}
}

在QuickRedis中查看,问题解决!!!

后续会出现的问题:
如何实体类中有LocalDateTime类型的属性,在redis序列化时会报以下错误.
Redis序列化 jdk8  LocalDateTime问题

org.springframework.data.redis.serializer.SerializationException: Could not write JSON: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling

解决redis序列化java8 LocalDateTime

问题背景

目前项目全面支持JDK1.8,使用 LocalDateTime 代替 Date,原因为 date 格式化时不安全。

问题描述

org.springframework.data.redis.serializer.SerializationException: Could not write JSON: Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling

问题分析

GenericJackson2JsonRedisSerializer 解析 出错

解决方案一(全局)

 引入依赖

<dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId><version>2.14.2</version>
</dependency>



RedisTemplateConfig 配置文件中修改如下

/*** 自定义序列化*/
@Configuration
public class RedisTemplateConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();redisTemplate.setConnectionFactory(connectionFactory);// key采用String的序列化方式redisTemplate.setKeySerializer(RedisSerializer.string());// hash的key也采用String的序列化方式redisTemplate.setHashKeySerializer(RedisSerializer.string());//创建Json序列化工具  ,支持jdk8 LocalDateTimeJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);//LocalDatetime序列化JavaTimeModule timeModule = new JavaTimeModule();timeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));timeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));timeModule.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));timeModule.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);om.registerModule(timeModule);jackson2JsonRedisSerializer.setObjectMapper(om);// value序列化方式采用jacksonredisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// hash的value序列化方式采用jacksonredisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;}
}

解决方案二(单个字段)

@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
protected LocalDateTime createTime;


 

相关文章:

配置自定义RedisTemplate 解决redis序列化java8 LocalDateTime

目录 配置自定义RedisTemplate 引入依赖 配置连接redis 编写测试类 出现问题 配置序列化 解决redis序列化java8 LocalDateTime 问题背景 问题描述 问题分析 解决方案一&#xff08;全局&#xff09; 解决方案二&#xff08;单个字段&#xff09; 配置自定义RedisTe…...

华为---登录USG6000V防火墙---console、web、telnet、ssh方式登录

目录 一、环境搭建 二、第一次登录USG6000V防火墙&#xff0c;即通过console方式登录 三、用户配置 四、web登录USG6000V防火墙 1. 用web创建的用户通过web方式登录USG6000V防火墙 2. 命令行创建的用户通过web方式登录USG6000V防火墙 五、ssh方式登录USG6000V防火墙 1. 用…...

css图片属性,图片自适应

CSS 图片属性指南&#xff1a;background-size 和 object-fit 在前端开发中&#xff0c;使用图片是非常常见的。为了让图片在网页中显示得更好&#xff0c;CSS 提供了多种属性来调整和控制图片的大小和布局。其中&#xff0c;background-size 和 object-fit 是两个常用的属性&a…...

【Python百宝箱】数据科学的黄金三角:数据挖掘和聚类

数据之舞&#xff1a;Python数据科学库横扫全场 前言 在当今数据驱动的时代&#xff0c;Python成为数据科学家和分析师的首选工具之一。本文将介绍一系列强大的Python库&#xff0c;涵盖了数据处理、可视化、机器学习和自然语言处理等领域。无论你是初学者还是经验丰富的数据…...

【数据结构和算法】最大连续1的个数 III

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;滑动窗口 2.2 滑动窗口解题模板 三、代码 3.1 方法一&#xff1a;滑动窗口 四、…...

AngularJS

理解实现代码的逻辑为主要&#xff0c;代码怎么写为次要。 参考资料&#xff1a; 《AngularJS入门与进阶》&#xff0c;江荣波著 前端开发常用框架 React&#xff1a;由Facebook开发&#xff0c;用于构建用户界面的JavaScript库&#xff0c;以组件化和虚拟DOM著称。 Angular&…...

初级数据结构(七)——二叉树

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;六&#xff09;——堆 | NULL 下一篇-> 1、写在前面 二叉树的基本概念在《初级数据结构&#xff08;五&#xff09;——树和二叉树的概念》中已经介绍得足够详细了。上一…...

对比学习综述

1.简介 2.相关工作 2.1、Inst Disc 代理任务&#xff1a;个体判别。把每一个图片看作是一种类别&#xff0c;把每一个图片都区分开来。 正负样本选择&#xff1a;正样本是图片本身&#xff0c;负样本是数据集里的其他图片&#xff0c;该文章从memory bank中随机抽取4096个负…...

R语言【cli】——cli_warn可以更便捷的在控制台输出警告信息

Package cli version 3.6.2 cli_warn(message, ..., .envir parent.frame()) 参数【message】&#xff1a;它是通过调用 cli_bullets() 进行格式化的。进一步地&#xff0c;还需要调用 inline-makeup&#xff08;内联标记&#xff09;。 参数【...】&#xff1a;传递给 rlan…...

从零开始创建GPTs 人人都可以编写自己的ChatGPT产品

在这个人工智能迅猛发展的时代&#xff0c;GPT&#xff08;生成式预训练变换器&#xff09;已经成为一项令人兴奋的技术&#xff0c;它打开了创意和知识的新大门。无论你是一名编程新手、一位热爱探索的学生&#xff0c;还是对未来充满好奇的专业人士&#xff0c;GPTs都可以为你…...

人工智能对网络安全的影响

技术的快速发展带来了不断增长的威胁环境&#xff0c;网络犯罪分子和恶意行为者利用我们互联世界中的漏洞。在这个数字时代&#xff0c;数据泄露和网络攻击呈上升趋势&#xff0c;仅靠传统的安全措施已经不够了。人工智能 &#xff08;AI&#xff09; 的进步彻底改变了网络安全…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextInput输入框组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之TextInput输入框组件 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、TextInput 接口 TextInput(value?:{placeholder?: ResourceStr, tex…...

【C++入门到精通】互斥锁 (Mutex) C++11 [ C++入门 ]

阅读导航 引言一、Mutex的简介二、Mutex的种类1. std::mutex &#xff08;基本互斥锁&#xff09;2. std::recursive_mutex &#xff08;递归互斥锁&#xff09;3. std::timed_mutex &#xff08;限时等待互斥锁&#xff09;4. std::recursive_timed_mutex &#xff08;限时等待…...

安全狗云原生安全-云甲·云原生容器安全管理系统

随着云计算的快速发展&#xff0c;容器技术逐渐成为主流。然而&#xff0c;随着容器的普及&#xff0c;安全问题也日益突出。为了解决这一问题&#xff0c;安全狗推出了云原生容器安全管理系统——云甲。 云甲是安全狗云原生安全的重要组成部分&#xff0c;它采用了先进的云原生…...

Python 学习路线:介绍、基础语法、数据结构、算法、高级主题、框架及异步编程详解

Python 介绍 Python 是一种 高级 的、解释型 的、通用 的编程语言。其设计哲学强调代码的可读性&#xff0c;使用显著的缩进。Python 是 动态类型 和 垃圾收集 的。 基本语法 设置 Python 环境并开始基础知识。 文章链接&#xff1a;Python 安装与快速入门 变量 变量用于…...

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI+Vant 电影院订票管理系统 的设计与实现

一.项目介绍 基于SpringBootVue 电影院订票管理系统 分为前端和后端。 前端&#xff08;用户&#xff09;&#xff1a; 登录后支持查看首页、电影、影院和我的信息 支持查看正在热映和即将上映的电影信息 支持购票&#xff08;需选择影院座位&#xff09;、看过&#xff08;评论…...

轻量级购物小程序H5产品设计经典样例

主要是看到这个产品设计的不错值得借鉴特记录如下&#xff1a; 不过大多数购物app都大致相同&#xff0c;这个算是经典样例&#xff0c;几乎都可以复制&#xff0c;我第一次使用&#xff0c;感觉和顺畅。看上去产品是经过打磨的&#xff0c;布局非常好。内容也很丰富。支持异业…...

final, finally, finalize 的区别?

1.final 用于声明属性&#xff0c;方法和类&#xff0c;分别表示属性不可变&#xff0c;方法不可覆盖&#xff0c;类不可继承。 内部类要访问局部变量&#xff0c;局部变量必须定义成 final 类型 2.finally 是异常处理语句结构的一部分&#xff0c;表示总是执行 3.finalize …...

4.使用 Blazor 构建 Web 应用程序

微软官方培训 了解如何通过 Blazor Web 用户界面框架构建你的第一个 Web 应用程序。 https://learn.microsoft.com/zh-cn/training/paths/build-web-apps-with-blazor/?viewaspnetcore-8.0 8个模块 目录 微软官方培训 1.使用 Blazor 进行 Web 开发的简介 2.使用 Blazor…...

CentOS操作学习(二)

上一篇学习了CentOS的常用指令CentOS指令学习-CSDN博客 现在我们接着学习 一、Vi编辑器 这是CentOS中自带的编辑器 三种模式 进入编辑模式后 i&#xff1a;在光标所在字符前开始插入a&#xff1a;在光标所在字符串后开始插入o&#xff1a;在光标所在行的下面另起一新行插入…...

OpenCV技术应用(9)— 视频的暂停播放和继续播放

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本节课就手把手教大家如何控制视频的暂停播放和继续播放&#xff0c;希望大家学习之后能够有所收获~&#xff01;&#x1f308; 目录 &#x1f680;1.技术介绍 &#x1f680;2.实现代码 &#x1f680;1.技术介绍…...

C#时间戳转换

时间戳转化为时间 long oldtime1703235741; System.DateTime startTime TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0)); var newtimestartTime.AddMilliseconds(oldtime).ToString("yyyy-MM-dd HH:mm:ss.fff"); 时间转化为时…...

Postgresql源码(118)elog/ereport报错跳转功能分析

1 日志接口 elog.c完成PG中日志的生产、记录工作&#xff0c;对外常用接口如下&#xff1a; 1.1 最常用的ereport和elog ereport(ERROR,(errcode(ERRCODE_UNDEFINED_TABLE),errmsg("relation \"%s\" does not exist",relation->relname)));elog(ERRO…...

Python Selenium中的强大等待设置详解

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Web自动化测试中&#xff0c;等待是至关重要的一环&#xff0c;而Selenium提供了丰富的等待设置来确保测试脚本的可靠性和稳定性。本文将深入研究Python Selenium中常用的必备等待设置&#xff0c;包括显式等待…...

ACL实现固定时间访问资源——项目

文章目录 一、前言二、项目拓扑三、项目需求四、配置思路五、配置步骤1 IP地址2 端口类型3 静态路由4 流策略 六、结语 免责声明 本文旨在提供信息和解决问题的建议&#xff0c;观点和建议可能不适用于个人情况&#xff0c;仅供参考&#xff01;&#xff01;&#xff01; 文章中…...

前端学习——关于前端框架的思考

前端框架 我们知道在AngularJS&#xff0c;react&#xff0c;vue等前端框架出现之前&#xff0c;前端开发都是通过js直接操作dom树来实现的&#xff0c;而有了前端框架之后&#xff0c;前端开发基本上不需要在直接操作dom树&#xff0c;相当于在原生html的dom树之间和前端程序…...

大创项目推荐 深度学习+opencv+python实现车道线检测 - 自动驾驶

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &am…...

Linux(二)常用命令

文章目录 一、文件管理命令1.1 chmod1.2 chown1.3 cat1.4 cp1.5 find1.6 head1.7 tail1.8 less1.9 more1.10 mv1.11 rm1.12 touch1.13 vim1.14 >和>>1.15 scp1.16 ln1.17 怎么用命令查看日志 二、文档管理命令2.1 grep2.2 wc2.3 echo 三、磁盘管理命令3.1 cd3.2 df3.3…...

PHP通过mailer发送邮箱

<?php namespace sw\controler\action;require(APP_DIR./extend/PHPMailer/class.phpmailer.php); require(APP_DIR./extend/PHPMailer/class.smtp.php); class action_test_mailer extends Base {public function test(){$smtpemailto"1967899707qq.com";//接收…...

c# OpenCV 基本绘画(直线、椭圆、矩形、圆、多边形、文本)(四)

我们将在这里演示如何使用几何形状和文本注释图像。 Cv2.Line() 绘制直线 Cv2.Ellipse() 绘制椭圆Cv2.Rectangle() 绘制矩形Cv2.Circle() 绘制圆Cv2.FillPoly() 绘制多边形Cv2.PutText() 绘制文本 一、绘制直线 Cv2.Line(image, start_point, end_point, color, thickness) …...

广州网络帮助建站/seo搜索引擎优化工程师招聘

http://www.trirand.com/jqgridwiki/doku.php?idwiki:jqgriddocs...

知名的网站建设公司/关键词免费下载

1.下列除哪组外都是镇心安神药组&#xff08;&#xff09; A.龙骨、牡蛎 B.朱砂、磁石 C.龟板、鳖甲 D.珍珠、琥珀 E.珍珠母、紫贝齿 2.下列忌火煅的药物是&#xff08;&#xff09; A.青礞石 B.牡蛎 C.朱砂 D.石决明 E.代赭石 3.既能镇惊安神&#xff0c;平肝潜阳&#xf…...

怎样做旅游网站/美国今天刚刚发生的新闻

IO的分类 IO IO的方式通常分为几种&#xff0c;同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。 IO流的简单分类 按照流的流向分&#xff0c;可以分为输入流和输出流&#xff1b;按照操作单元划分&#xff0c;可以划分为字节流和字符流&#xff1b;按照流的角色划分为节点…...

网页微博怎么用qq登录/太原百度网站快速优化

JavaScript中本地对象、内置对象和宿主对象 1、本地对象 ECMA-262 把本地对象&#xff08;native object&#xff09;定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。 再来看一下&#xff0c;“本地对象”包含哪些内容&#xff1a; Object、Function、Array、String、…...

做湘菜的网站/seo关键词优化技术

删除iphone中/System/Library/PrivateFrameworks/IAP.framework/Support/目录下的iapd文件 进入/SYSTEM/Library/LaunchDaemons/ 目录然后删除 com.apple.iapd.plist 文件转载于:https://www.cnblogs.com/ctacy/p/6114191.html...

大连网站策划/站长工具官网

转载请注明来源&#xff1a; http://blog.csdn.net/milado_nju/article/details/7300058 WebKit和Chromium的代码量很大(这两个项目都是几百万行代码的级别&#xff0c;不包括它们依赖的第三方库&#xff09;&#xff0c;读起来是相当的不容易。但是良好的代码组织结构很好的帮…...