日期时间参数,格式配置(SpringBoot)

这篇具有很好参考价值的文章主要介绍了日期时间参数,格式配置(SpringBoot)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

在SpringBoot项目中,接口中的日期和时间类型的参数,配置格式。

日期格式

接口中常用的日期时间格式有两种:

  1. 字符串(比如:yyyy-MM-dd HH:mm:ss)
  2. 时间戳(比如: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;

}

接口调用成功

日期格式正确,接口调用成功。

springboot 日期参数,Spring Boot,spring boot

打印日志:

查询用户列表。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)

接口调用失败

接口输入必须符合格式,否则会调用失败(报出异常)。
springboot 日期参数,Spring Boot,spring boot

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:ss
    time-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;

}

效果

接口调用:
springboot 日期参数,Spring Boot,spring boot
控制台打印参数:

新增用户,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;

}

效果

springboot 日期参数,Spring Boot,spring boot

响应时间出参:时间戳

配置

spring:
  jackson:
    serialization:
      # 时间字段(java.util.Date),返回时间戳。注意,此配置会覆盖掉 spring.jackson.date-format 。
      write-dates-as-timestamps: true

效果

响应时间出参,为时间戳格式。

springboot 日期参数,Spring Boot,spring boot

局部配置

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;

}

效果

springboot 日期参数,Spring Boot,spring boot

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;

}

效果

springboot 日期参数,Spring Boot,spring boot

编辑用户,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)

springboot 日期参数,Spring Boot,spring boot

springboot 日期参数,Spring Boot,spring boot

响应时间出参:局部格式

使用注解:@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 日期参数,Spring Boot,spring boot文章来源地址https://www.toymoban.com/news/detail-770908.html

到了这里,关于日期时间参数,格式配置(SpringBoot)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Springboot Security 认证鉴权——使用JSON格式参数登录

    在 Spring Security 中,默认的登陆方式是以表单形式进行提交参数的。可以参考前面的几篇文章,但是在前后端分离的项目,前后端都是以 JSON 形式交互的。一般不会使用表单形式提交参数。所以,在 Spring Security 中如果要使用 JSON 格式登录,需要自己来实现。那本文介绍两种方

    2024年02月04日
    浏览(27)
  • springboot:时间格式化的5种方法(解决后端传给前端的时间格式转换问题)推荐使用第4和第5种!

    本文转载自:springboot:时间格式化的5种方法(解决后端传给前端的时间显示不一致)_为什么前端格式化日期了后端还要格式化_洛泞的博客-CSDN博客 为了方便演示,我写了一个简单 Spring Boot 项目,其中数据库中包含了一张 userinfo 表,它 的组成结构和数据信息如下:  项目目

    2024年02月10日
    浏览(31)
  • 常用日期时间格式(日期格式)介绍、文件日期时间(文件名日期时间)(ISO 8601、UNIX时间戳、RFC 3339、ANSI C的asctime()样式、年月日时分秒格式)

    日期时间格式是计算机科学中的一个基础概念,其在编程、数据库管理以及其他与数据处理有关的领域中都有广泛的应用。此篇文章将会深入讨论各种常见的日期和时间格式,并给出一些示例。 ISO 8601是国际标准化组织制定的日期和时间表示法,它的通用形式为 YYYY-MM-DDTHH:

    2024年01月25日
    浏览(37)
  • 【Spring】SpringBoot的10个参数验证技巧

    参数验证很重要,是平时开发环节中不可少的一部分,但是我想很多后端同事会偷懒,干脆不错,这样很可能给系统的稳定性和安全性带来严重的危害。那么在Spring Boot应用中如何做好参数校验工作呢,本文提供了10个小技巧,你知道几个呢? Spring Boot提供了内置的验证注解,

    2024年02月10日
    浏览(29)
  • 【Spring Boot】SpringBoot参数验证以及实现原理

    参数验证很重要,是平时开发环节中不可少的一部分,但是我想很多后端同事会偷懒,干脆不做,这样很可能给系统的稳定性和安全性带来严重的危害。 那么在Spring Boot应用中如何做好参数校验工作呢,本文提供了小技巧以及验证实现原理,你知道几个呢? Spring Boot 提供了内

    2023年04月16日
    浏览(43)
  • Element Plus 日期选择器 获取选中的日期的格式(当前日期/时间戳格式)

    如果想要获取选中的日期时间就需要通过,Element Plus 日期选择器 format属性和value-format属性。 format 指定输入框的格式。 value-format  指定绑定值的格式。 为日期选择器添加下面的代码,那么获取的值就会变成你选中的日期 format=\\\"YYYY/MM/DD\\\"  value-format=\\\"YYYY-MM-DD\\\" 如果想要转换为

    2024年02月13日
    浏览(43)
  • 【Python】【pandas】DataFrame将包含日期值的列转换为日期时间格式或者日期格式

    上代码: 输出结果: 当执行上面的代码时,将执行以下步骤: 导入 pandas 库,以便使用其中的函数和方法。 创建一个名为 df 的DataFrame,其中包含一个名为 \\\'Date\\\' 的列。该列包含了不同的日期值,包括一个无效的日期值 \\\'Invalid Date\\\' 。 使用 pd.to_datetime 函数将 \\\'Date\\\' 列转换为日

    2024年02月05日
    浏览(40)
  • 【js】时间和时间戳转换、日期格式化

    1、时间戳转换日期方法 (格式:2023-08-17) 2、日期字符串转时间戳 3、时间戳转换日期+时间方法 date:时间戳数字(格式:2023-08-17 14:11:01) 4、 获取日期中文格式

    2024年02月12日
    浏览(40)
  • Java:日期毫秒值和常见日期时间格式相互转换

    本文介绍了Java中,日期毫秒值和常见日期格式相互转换。 提示:以下是本篇文章正文内容,下面案例可供参考 代码示例: 代码示例: 如果想将指定时间转换为毫秒值,相对比较麻烦,这里提供两种方法供参考 利用Calendar.set() 利用DateFormat.parse() 本文介绍了Java中如何将毫秒

    2024年02月16日
    浏览(30)
  • Domino中的时间日期格式设置

    大家好,才是真的好。 今天我们谈管理运维问题,相对于前面的技术来说,会简单很多。 就是Domino服务器运行时的时间日期显示问题。这和你的邮件、应用等里面的文档时间日期也有关系。 简单来说,在默认的设置情况下,Domino运行时时间日期格式会读取当前操作系统的时

    2024年02月01日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包