日期时间参数,格式配置(SpringBoot)
介绍
在SpringBoot项目中,接口中的日期和时间
类型的参数,配置格式。
日期格式
接口中常用的日期时间格式有两种:
字符串
(比如:yyyy-MM-dd HH:mm:ss)时间戳
(比如:1696839876955)
这两种方式各有优势。
- 字符串格式表示时间,直观清晰,便于识别出时间。但是,字符串格式存在时区问题,需要在字段中描述出时区(SpringMVC的默认时间格式中带有时区),或者前后端规定好默认时区,比如东八区(GMT+8)。
- 时间戳,用数字表示时间,准确定位时间,不存在时区问题。缺点是,不够直观,无法直接识别出时间戳对应的具体时间(需要转换),不便于从接口直接判断时间是否正确,测试比较费时费力。
格式配置
日期参数的格式,可以配置。分为:全局配置
和局部配置
。
- 全局配置:作用于项目全局的时间参数。
- 局部配置:只作用于配置的字段,覆盖全局配置,其余字段不受影响。
全局配置
Query时间入参,使用字符串
配置
spring:mvc:format:# Query参数,时间格式(转换 java.util.Date)date: yyyy-MM-dd HH:mm:ss
Query参数实体示例
Query参数,使用 java.util.Date
类型接收。
package com.example.web.exception.query;import com.example.core.validation.phone.query.PhoneQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springdoc.api.annotations.ParameterObject;import java.util.Date;@Data
@ParameterObject
@Schema(name = "用户Query")
public class UserQuery {// 其他字段@Schema(description = "开始时间", example = "2023-01-01 08:30:00")private Date beginTime;@Schema(description = "结束时间", example = "2023-12-31 17:00:00")private Date endTime;}
接口调用成功
日期格式正确,接口调用成功。
打印日志:
查询用户列表。userQuery=UserQuery(name=null, phone=null, beginTime=Sun Jan 01 08:30:00 GMT+08:00 2023, endTime=Sun Dec 31 17:00:00 GMT+08:00 2023, beginDate=null, endDate=null),pageQuery=PageQuery(pageNumber=1, pageSize=10)
接口调用失败
接口输入必须符合格式,否则会调用失败(报出异常)。
Body时间入参和响应时间出参
默认响应中的时间参数,会转换成字符串,默认时间格式举例:
2023-10-10T01:31:03.279+00:00
配置
目标格式为:yyyy-MM-dd HH:mm:ss
,东八区。
spring:jackson:# Body参数和响应,时间格式(转换 java.util.Date)date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8
Body时间入参:UserEditParam
package com.example.web.response.model.param;import com.example.core.validation.phone.strict.Phone;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.Date;@Data
@Schema(name = "编辑用户Param")
public class UserEditParam {// 其他字段@JsonFormat(pattern = "yyyy-MM-dd")@Schema(description = "开始日期", example = "2023-01-01")private Date beginDate;@JsonFormat(pattern = "yyyy-MM-dd")@Schema(description = "结束日期", example = "2023-12-31")private Date endDate;}
效果
接口调用:
控制台打印参数:
新增用户,Post请求。param=UserAddParam(name=张三, phone=18612345678, email=zhangsan@example.com, beginTime=Sun Jan 01 08:30:00 CST 2023, endTime=Sun Dec 31 17:00:00 CST 2023)
响应时间出参:UserVO
package com.example.web.model.vo;import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;import java.util.Date;@Data
@Schema(name = "用户VO")
public class UserVO {// 其他字段@Schema(description = "开始时间", example = "2023-01-01 01:20:30")private Date beginTime;@Schema(description = "结束时间", example = "2023-01-01 01:20:30")private Date endTime;}
效果
响应时间出参:时间戳
配置
spring:jackson:serialization:# 时间字段(java.util.Date),返回时间戳。注意,此配置会覆盖掉 spring.jackson.date-format 。write-dates-as-timestamps: true
效果
响应时间出参,为时间戳格式。
局部配置
Query时间入参:局部格式
Query时间入参,如果某个字段需要的时间格式和全局不相同,可以配置这个字段的自定义的入参格式。
使用注解:@DateTimeFormat
配置示例
package com.example.web.exception.query;import com.example.core.validation.phone.query.PhoneQuery;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springdoc.api.annotations.ParameterObject;
import org.springframework.format.annotation.DateTimeFormat;import java.util.Date;@Data
@ParameterObject
@Schema(name = "用户Query")
public class UserQuery {// 其他字段@DateTimeFormat(pattern = "yyyy-MM-dd")@Schema(description = "开始日期", example = "2023-01-01")private Date beginDate;@DateTimeFormat(pattern = "yyyy-MM-dd")@Schema(description = "结束日期", example = "2023-12-31")private Date endDate;}
效果
Body时间入参:局部格式
使用注解:@JsonFormat
配置示例
package com.example.web.response.model.param;import com.example.core.validation.phone.strict.Phone;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.Date;@Data
@Schema(name = "编辑用户Param")
public class UserEditParam {// 其他字段@JsonFormat(pattern = "yyyy-MM-dd")@Schema(description = "开始日期", example = "2023-01-01")private Date beginDate;@JsonFormat(pattern = "yyyy-MM-dd")@Schema(description = "结束日期", example = "2023-12-31")private Date endDate;}
效果
编辑用户,PUT请求。id=1234567890123456789,param=UserEditParam(name=张三, phone=18612345678, email=zhangsan@example.com, beginDate=Sun Jan 01 00:00:00 CST 2023, endDate=Sun Dec 31 00:00:00 CST 2023)
问题
注意:如下图传递参数,接口也能调用成功。
接口收到的参数,只包含年月日。
编辑用户,PUT请求。id=1234567890123456789,param=UserEditParam(name=张三, phone=18612345678, email=zhangsan@example.com, beginDate=Sun Jan 01 00:00:00 CST 2023, endDate=Sun Dec 31 00:00:00 CST 2023)
响应时间出参:局部格式
使用注解:@JsonFormat
配置示例
package com.example.web.model.vo;import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;import java.util.Date;@Data
@Schema(name = "用户VO")
public class UserVO {// 其他字段@JsonFormat(pattern = "yyyy-MM-dd")@Schema(description = "开始日期", example = "2023-01-01")private Date beginDate;@JsonFormat(pattern = "yyyy-MM-dd")@Schema(description = "结束日期", example = "2023-12-31")private Date endDate;}
效果
相关文章:

日期时间参数,格式配置(SpringBoot)
介绍 在SpringBoot项目中,接口中的日期和时间类型的参数,配置格式。 日期格式 接口中常用的日期时间格式有两种: 字符串(比如:yyyy-MM-dd HH:mm:ss)时间戳(比如:1696839876955&a…...
JAVA 泛型的定义以及使用
泛型类 /*** <T> 为该类定义泛型,可以是一个或多个<T,...>* 定义的泛型可以在类中作为:* 类变量类型: T data* 类方法的入参以及返回类型 public void setData(T data),public T getData();次数以set&a…...

Day-08 基于 Docker安装 Nginx 镜像-负载均衡
1、反向代理后,自然而然就引出了负载均衡,下面简单实现负载均衡的效果; 2、实现该效果需要再添加一个 Nginx ,所以要增加一个文件夹。 /home|---mutou|----nginx|----conf.d|----html|----conf.d2|----html3 1.创建 html3 文件夹, 新建 index…...

3、在 CentOS 8 系统上安装 PostgreSQL 15.4
PostgreSQL,作为一款备受欢迎的开源关系数据库管理系统(RDBMS),已经存在了三十多年的历史。它提供了SQL语言支持,用于管理数据库和执行CRUD操作(创建、读取、更新、删除)。 由于其卓越的健壮性…...

sap 一次性供应商 供应商账户组 临时供应商 <转载>
原文链接:https://blog.csdn.net/xianshengsun/article/details/132620593 sap中有一次性供应商这个名词,一次性供应商和非一次性供应商又有什么区别呢? 有如何区分一次性供应商和非一次性供应商呢? 1 区分一次性供应商和非一次性…...
总结html5中常见的选择器
HTML5并没有引入新的选择器类型,它仍然使用CSS选择器来选择和操作HTML元素。HTML5中仍然可以使用CSS2和CSS3中定义的各种选择器。以下是HTML5中常见的选择器类型: 1. 元素选择器(Element Selector):使用元素名称作为选…...

Java基础面试-JDK JRE JVM
详细解释 JDK(Java Devalpment Kit)java 开发工具 JDK是Java开发工具包,它是Java开发者用于编写、编译、调试和运行Java程序的核心组件。JDK包含了Java编程语言的开发工具和工具集,以及Java标准库和其他一些必要的文件。JDK中的…...

OpenCV实现图像傅里叶变换
傅里叶变换 dftcv.dft(img_float32,flagscv.DFT_COMPLEX_OUTPUT): flags:标志位,指定变换类型,cv.DFT_COMPLEX_OUTPUT会返回复数结果。 傅立叶变换,将输入的图像从空间域转换到频率域。 返回结果: 此函数返回一个复杂数值数组,…...

快手新版本sig3参数算法还原
Frida Native层主动调用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81…...

Linux 安全 - LSM机制
文章目录 前言一、LSM起源二、LSM简介2.1 MAC2.2 LSM特征 三、Major and Minor LSMs3.1 Major LSMs3.2 Minor LSMs3.3 BPF LSM 四、LSM 框架五、LSM Capabilities Module六、LSM hooks 说明参考资料 前言 在这两篇文章中介绍了 Linux 安全机制 Credentials : Linu…...

uni-app:实现简易自定义下拉列表
效果 代码 <template><view><view class"dropdown-trigger" tap"showDropdown">{{ selectedItem }}</view><view class"dropdown-list" v-if"showList"><view class"dropdown-item" v-f…...

排序算法——直接插入排序
一、介绍 插入排序就是将前两个元素排好,再将第三个元素通过与前边的元素比较后插入适当的位置,再将第四个元素插入,不断重复插入与前边元素比较的操作,直到将元素都排列好。 演示如下: 视频演示:…...

手动抄表和自动抄表优缺点对比
随着科技的发展,自动抄表技术已经越来越成熟,被广泛应用于各个领域。然而,手动抄表在一些特定场景下仍然具有一定的优势。本文将从手动抄表和自动抄表的优缺点入手,对比分析它们的应用场景和使用价值。 1.成本低:手动抄…...
HiSilicon352 android9.0 emmc添加新分区
添加新分区 从emmc中单独划分出一个分区,用来存储相关数据(可用于存储照片,视频,音乐和文档等)或者系统日志log,从而不影响到其他分区。 实现方法: device/hisilicon/Hi3751V350/etc/Hi3751V3…...

networkX-04-查找k短路
文章目录 1.构建图2.使用networkX查找最短路径3.自己构建方法 教程仓库地址:github networkx_tutorial import networkx as nx import matplotlib.pyplot as plt1.构建图 # 创建有向图 G nx.DiGraph()# 添加带权重的边 edges [(0, 1, 1), (0, 2, 2), (1, 2, 1), …...

Linux虚拟机搭建RabbitMQ集群
普通集群模式,意思就是在多台机器上启动多个 RabbitMQ 实例,每台机器启动一个。创建的 queue,只会放在一个 RabbitMQ 实例上,但是每个实例都同步 queue 的元数据(元数据可以认为是 queue 的一些配置信息,通…...

C之fopen/fclose/fread/fwrite/flseek
一、C中文件操作简介 c中的文件操作大致和linux的文件操作类似,但是毕竟是不同的API,所以会有些差异。部分差异会在下面的案例中体验 二、fopen open的参数有两个一个是文件名,一个是模式选择,不同open函数,open中的模…...

3D机器视觉:解锁未来的立体视野
原创 | 文 BFT机器人 机器视觉领域一直在不断演进,从最初的二维图像处理,逐渐扩展到了更复杂的三维领域,形成了3D机器视觉。3D机器视觉技术的涌现为计算机系统带来了全新的感知和理解能力,这一领域的发展正日益受到广泛关注。本文…...

大端字节序存储 | 小端字节序存储介绍
为什么存储的顺序有些变动呢? 大小端的介绍 我们在创建变量时,操作系统就会给你分配空间,比如你创建了【short/int/double/float】的变量,这些变量的类型都是大于1个字节的,操作系统会根据你这个变量的类型ÿ…...

ASP.Core3.1 WebAPI 发布到IIS
本篇文章简述如何在IIS中发布你的.Core 程序 1.打包 首先你要打包好你程序,如果你是Visual Studio开发的程序,那你右击你的项目点击发布 如果你是Visual Code 开发的,那你在你的终端切换到你的目录然后执行命令 dotnet publish --config…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...