东八区的 springboot 如何配置序列化
东八区的 springboot 🚞
- 使用SpringBoot默认配置
- 自定义配置类
- 自定义 ObjectMapper
- 自定义序列化器
- 总结
我接受它的苦,它的灰暗,它的刺,因为总会过去,我的花会开,生活也会慢慢拥抱我
使用SpringBoot默认配置
SpringBoot默认使用UTC时间,如果我们需要使用东八区时间,可以使用以下配置:
spring:jackson:time-zone: GMT+8
这种方式是最简单的方式,不需要任何额外的依赖和代码,但是需要注意的是,该配置是全局生效的,可能会影响到其他需要使用UTC时间的地方,而且每次新增依赖、升级SpringBoot版本等情况都需要再次检查该配置是否正确。
自定义配置类
另外一种方式是自定义配置类,使用@Configuration注解创建一个配置类,然后在该类中配置Jackson2ObjectMapperBuilderCustomizer,指定时区为东八区。
@Configuration
public class JacksonConfiguration {@Beanpublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return builder -> builder.timeZone(TimeZone.getTimeZone("GMT+8"));}
}
这种方式需要自定义代码,但是可以更加灵活地控制使用东八区时间的范围,而且不会影响到其他需要使用UTC时间的地方。但是同样需要注意每次新增依赖、升级SpringBoot版本等情况都需要再次检查该配置是否正确。
自定义 ObjectMapper
也可以通过自定义 Jackson 的 ObjectMapper 来使用东八区时间。
具体实现方式是,在 ObjectMapper 上设置一个自定义的 JavaTimeModule,然后在该模块上设置时区为东八区。
示例代码如下:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;public class CustomObjectMapper extends ObjectMapper {public CustomObjectMapper() {JavaTimeModule javaTimeModule = new JavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME));javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ISO_LOCAL_DATE_TIME));this.registerModule(javaTimeModule);this.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));}
}
在上面的示例中,我们创建了一个继承自 ObjectMapper 的 CustomObjectMapper,并在该对象上注册了一个自定义的 JavaTimeModule,该模块的序列化和反序列化方式分别使用了 LocalDateTimeSerializer 和 LocalDateTimeDeserializer,同时将时区设置为 Asia/Shanghai。你也可以根据需要添加其他的时间序列化和反序列化方式。
在代码中使用自定义的 CustomObjectMapper 对象进行序列化和反序列化即可使用东八区时间。例如:
CustomObjectMapper objectMapper = new CustomObjectMapper();
String jsonString = objectMapper.writeValueAsString(yourObject);
YourObject deserializedObject = objectMapper.readValue(jsonString, YourObject.class);
值得注意的是,如果你需要在 Spring Boot 中使用自定义的 ObjectMapper,则需要在配置类中进行相关配置:
@Configuration
public class JacksonConfig {@Beanpublic ObjectMapper objectMapper() {return new CustomObjectMapper();}
}
这样配置之后,在代码中使用 @Autowired 注入该 ObjectMapper 对象即可
自定义序列化器
第三种方式是自定义序列化器,在序列化的过程中将时间转换为东八区时间。需要实现JsonSerializer接口,然后在@JsonSerialize注解中指定该序列化器。具体代码如下:
public class ChinaZoneDateTimeSerializer extends JsonSerializer<ZonedDateTime> {@Overridepublic void serialize(ZonedDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {gen.writeString(value.withZoneSameInstant(ZoneId.of("GMT+8")).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));}
}
然后在需要序列化的对象的时间字段上使用@JsonSerialize注解,指定该序列化器。
@JsonSerialize(using = ChinaZoneDateTimeSerializer.class)
private ZonedDateTime createTime;
这种方式可以更加灵活地控制时间的格式和转换逻辑,但是需要自定义代码,而且对每个需要转换的时间字段都需要添加@JsonSerialize注解,有一定的代码侵入性。
总结
对于使用东八区时间的配置,不同的方式各有优劣,具体如下:
- 在代码中手动指定时区
优点:简单明了,没有额外的依赖
缺点:每次使用时都需要手动指定时区,不便于维护和修改。
- 在 Spring Boot 的 application.properties/yaml 中配置
优点:配置简单,在代码中直接使用自动装配的组件即可
缺点:如果有多个模块需要使用不同的时区,需要在不同的模块中分别进行配置
- 自定义 Jackson 的 ObjectMapper
优点:在多个模块中都可以使用同一种方式来进行配置,方便维护和修改
缺点:需要额外的依赖,并且需要对 Jackson 的序列化和反序列化机制有一定的了解。
综上所述,三种方式各有优缺点,需要根据实际需求和情况选择合适的方式。若是只需要使用全局东八区时间,可以选择使用SpringBoot默认配置;若是需要更加灵活地控制使用东八区时间的范围,可以选择自定义配置类;若是需要更加灵活地控制时间的格式和转换逻辑,可以选择自定义序列化器。
相关文章:
东八区的 springboot 如何配置序列化
东八区的 springboot 🚞使用SpringBoot默认配置自定义配置类自定义 ObjectMapper自定义序列化器总结我接受它的苦,它的灰暗,它的刺,因为总会过去,我的花会开,生活也会慢慢拥抱我 使用SpringBoot默认配置 S…...
论文阅读_LLaMA
论文信息 number headings: auto, first-level 2, max 4, _.1.1 name_en: LLaMA: Open and Efficient Foundation Language Models name_ch: LLaMA: 开放高效的基础语言模型 paper_addr: https://arxiv.org/abs/2302.13971 doi: https://doi.org/10.48550/arXiv.2302.13971 da…...
腾讯空降测试工程师,绩效次次拿S,真是砂纸擦屁股,给我露了一手啊
上周我们公司的绩效面谈全部结束了,每年到这个时间点就是打绩效的时候了,对于职场打工人来说绩效绝对是最重要的事情之一,原因也很简单:奖金、晋升、涨薪都和它有关系。 比如下面这个美团员工在脉脉上的自曝就很凄凉࿱…...
真题详解(计算机总线)-软件设计(四十五)
真题详解(二维数组)-软件设计(四十四)https://blog.csdn.net/ke1ying/article/details/130023062 1、2016年下半年 解析: A选项,当B中的两个结束都到达,会转到C2,因为C2没有事件&a…...
剪格子
[蓝桥杯 2013 省 A] 剪格子 题目描述 如图 111 所示,333\times 333 的格子中填写了一些整数。 我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是 606060。 本题的要求就是请你编程判定:对给定的 mnm\times nmn 的格…...
【Nowcoder-BC146.添加逗号 -OR63.删除公共字符】
Nowcoder-BC146.-OR63.Nowcoder-BC146.添加逗号Nowcoder-OR63.删除公共字符Nowcoder-BC146.添加逗号 题目:对于一个较大的整数 N(1<N<2,000,000,000) 比如 980364535,我们常常需要一位一位数这个数字是几位数,但是如果在这个数字每三位…...
能自动摊铺施工的公路滑模机多少钱一台
滑模机是能在公路施工现场进现场自动摊铺作业的设备,让路缘石经过设备制作一次性完成施工工序,整体成型一次完成。这样的使用流程整体包含了几个大的关键步骤,分别是测量后放置标示线-设备进场就位-原材料运输和供应-滑模机摊铺作业-后续伸缩…...
ChatGPT热潮下,因生成式AI失业的人出现,我成了第一批失业的人
近几个月来,越来越多的知名人士预计,年内大热的ChatGPT有望掀起一场新的工业革命。而纵观历史,历次工业革命往往会深远改变当时的社会结构——从机械织布机到内燃机再到第一台计算机,新技术的出现总是会引起人们对于被机器取代的恐…...
TypeScript01-基础知识
基础类型 boolean 类型 let isDone: boolean false; // ES5:var isDone false;number 类型 let count: number 10; // ES5:var count 10;string 类型 let name: string "semliker"; // ES5:var name semlinker;Symbol 类…...
【Redis学习】Redis安装配置
Linux 安装环境必须先具备gcc编译环境 版本选择 查看自己redis版本的命令 安全Bug按照官网提示,升级成为6.0.8及以上 目前建议都需要升级到6.0.8版本以上 本次我们用Redis7.0 Redis7安装步骤 下载获得redis-7.0.0.tar.gz后将它放入Linux目录/opt /opt目录下解…...
leetcode160:相交链表
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后…...
基于Prometheus的jvm监控指标详解
使用Prometheus 监控Springboot应用参考 Prometheus Operator实战—— Prometheus、Alertmanager、Grafana 监控Springboot服务 下面来看看jvm的监控指标 # HELP jvm_gc_collection_seconds Time spent in a given JVM garbage collector in seconds. # TYPE jvm_gc_collection…...
C程序设计语言基础
机器语言与高级语言 计算机硬件只能够识别电平信号,正电平或负电平,计算机的的各种按钮触发各种电平与计算机交互。随着随着操作系统的发展,人们用1,0分别表示正电平和负电平,并由0,1所组成的一系列指令指…...
构建同一局域网下文件共享网页
首先,我会将这个内容分成以下步骤: 目录 1. 安装必要的软件和工具 2. 搭建本地服务器 3. 编写账号系统和登录页面 4. 实现多人登录 5. 实现文件上传和共享功能 以下是每个步骤的详细说明和代码示例。 1. 安装必要的软件和工具 为了完成这个项目&…...
程序员未来是不是会大量失业?
程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store 会,但是主要原因并不是来自最近爆火的AIGC。 生成式AI对比与传统的工具的确很强大,但是要说替代某种工作岗位还为时尚早。最近铺天盖地的相关推文,热度一波未平又起…...
解密普元大文件传输平台新版本21种特性
本文主要介绍大文件传输平台及其传输特性,以平台版本升级为切入点,探讨大文件传输平台对多种传输场景的支持及部署管控方面能力的增强。目 录01 普元大文件传输平台02 普元文件传输平台新版本特性03 信创项目案例04 总结01普元大…...
每日一问-ChapGPT-20230406-中医基础-脉诊
文章目录每日一问-ChapGPT系列起因每日一问-ChapGPT-20230406-中医基础-脉诊脉诊脉诊的左右手脉诊拓展01沉脉:02迟脉:03促脉:04代脉:05动脉:06短脉:07伏脉:08浮脉:09革脉:10洪脉:11滑脉:12缓脉:13疾脉:14结脉:15紧脉:16芤脉:17散脉:18牢脉:19弦脉:20弱脉:21濡脉:22细脉:23微脉:…...
Nuxt项目asyncData服务端请求数据渲染
或许有些人会比较喜欢在mounted里去请求数据 但在Nuxt项目中是绝对不能这样操作的 因为 mounted的特性也说的比较明白了 当页面挂载完之后执行 但显然 seo只读你页面挂载的内容 如果你在这请求 那么对不起 你请求回来的数据渲染到界面上seo爬虫是看不到的 Nuxt项目请求数据 可…...
Vue 13 - 列表渲染 v-for
V-for介绍 当使用Vue.js框架时,可以使用v-for指令对数据进行循环遍历并渲染到模板中。v-for可以遍历数组、对象、字符串、指定次数等。 以下是v-for的用法: 遍历数组 <div v-for"(item, index) in items" :key"index"> {{…...
XML复习
目录什么是XMLXML中的内容可以干什么XML文件的创建以及其格式XML的文档约束-DTD约数XML的文档约束-schema约束Dom4J 解析XML 文档什么是XML XML 全称(extensible Markup Lanage) 可扩展标记语言它是一种数据的表示形式, 可以存储复杂的数据格式以及我们自己定义的格式.XML经常…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...
UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...
VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...
