SpringBoot接口如何正确地接收时间参数

news2024/12/22 22:24:04

唠嗑部分

在做Java开发时,肯定会碰到传递时间参数的情况吧,比如用户的出生日期、活动的开始,结束日期等等,这些参数往往是由前端传递过来的,那么在SpringBoot项目中,该如何正确的接收日期参数呢,这便是我们今日所说的内容

首先我们来回顾一下常用的几种传参方式

1、Params参数

Params参数也称路径传参,参数是路径的一部分,如:http://127.0.0.1:8888/date/receiveParamOfParams/2023-05-22

2、Query参数

Query参数通常使用?进行传递,多个参数使用&分割,如:http://127.0.0.1:8888/date/receiveParamOfQuery?bothDate=2023-05-22

3、请求体参数

请求体参数也是我们常用的json传参

那么为什么要回顾传参方式呢,难道说传参方式不同,接收日期参数的方式也不一样吗?是的没错

言归正传

日期是引用数据类型,在参数传递过程中是无法直接传递引用数据类型的参数的,对于日期时间而言,只能是传递指定格式的时间字符串,由框架帮我们转化为时间类型,对于SpringBoot来说,我们需要了解两个注解

@DateTimeFormat:将前端传递过来的时间格式的字符串转化为Java中的时间格式(引用数据类型)

@JsonFormat:将前端传递过来的时间格式的字符串转化为Java中的时间格式(引用数据类型)、将Java中的时间格式(引用数据类型)以指定的格式转成Json字符串

注意:@JsonFormat注解是由jackson提供的,而@DateTimeFormat注解是由Spring提供的

那下面就让我们分别说一下几种传递方式吧

Params参数

这种参数传递时间比较麻烦,大体思路是首先将时间格式的字符串以字符串传递过来,我们自行转化为时间

@PostMapping("/date/receiveParamOfParams/{date}")
public CommonResult receiveParamOfParams(@PathVariable("date") String date){
    CommonResult r = CommonResult.success(null);
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    if (StringUtils.hasLength(date)) {
        try {
            LocalDate localDate = LocalDate.parse(date, formatter);
            r.setData(localDate);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return r;
}

image-20230522140139654

Query参数

如果单个接收的话,也可以根据Params参数一样,先以字符串接收,自己转化为时间即可

在SpringBoot中,如果我们以JavaBean的形式接收Query参数,Spring会自动的映射

@PostMapping("/date/receiveParamOfQuery")
public CommonResult receiveParamOfQuery(DateReq req){
    CommonResult r = CommonResult.success(null);
    r.setData(req);
    return r;
}

DateReq

@Data
public class DateReq {
    private LocalDate bothDate;
    private LocalDateTime startDateTime;
}

运行结果

image-20230522140724166

注意哈,报错了,意思是不能够将一个字符串解析为LocalDate类型,此时我们需要在字段上加@DateTimeFormat注解

@Data
public class DateReq {
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate bothDate;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startDateTime;
}

运行看结果

image-20230522140931120

请求体传参(json传参)

@PostMapping("/date/receiveParamOfJson")
public CommonResult receiveParamOfJson(@RequestBody DateReq req){
    CommonResult r = CommonResult.success(null);
    r.setData(req);
    return r;
}

DateReq实体类如上哈

运行结果

image-20230522141144246

又报错了,SpringBoot默认的json解析器是jackson,它无法将时间字符串解析为时间类型,那么对于json传参而言,@DateTimeFormat注解就失去它的作用了

@Data
public class DateReq {
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate bothDate;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startDateTime;
}

运行看结果

image-20230522141432210

换成@JsonFormat注解就可以了,大伙有没有发现,红圈的位置,这个注解也能帮我们格式化时间输出的样式,可对比Query参数输出的结果

结语

1、非Json传参使用@DateTimeFormat,json传参使用@JsonFormat。

2、SpringBoot默认项目中的json解析器是jackson,如果配置的是fastjson,将@JsonFormat换成@JSONField注解即可。

3、制作不易,一键三连再走吧,您的支持永远是我最大的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/600707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如果不小心上了电信黑名单,应该怎么妥善处理呢?

有些小伙伴们在处理不用的手机卡时,可能会粗心大意,认为不用了就用不了呗,存在欠费停机的情况下也没有及时的去补交欠费,然后销户,导致了自己不小心上了电信黑名单,那遇到这种情况,应该怎么妥善…

论文解读 | 利用图形卷积核在距离图像中实现高效的3D目标检测

原创 | 文 BFT机器人 01 摘要 该论文提出了一种基于范围图像的高效3D物体检测方法,通过利用图卷积核来提取每个像素周围的局部几何信息。 作者设计了一种新颖的2D卷积网络架构,并提出了四种替代内积核心的卷积核,以注入所需的三维信息。该方法…

GPT最常用的应用场景有哪些?

生成式预训练转换器(GPT)是一种深度学习模型,它能够根据给定的提示生成类似人类的文本,彻底改变了自然语言处理(NLP)领域。 聊天机器人和虚拟助手 GPT最受欢迎的应用程序之一是开发聊天机器人和虚拟助手。凭…

【Python 自然语言处理(NLP)】零基础也能轻松掌握的学习路线与参考资料

Python 自然语言处理(NLP)是目前人工智能(AI)发展中的重要领域。随着科技的不断进步,NLP已经被应用于文本自动摘要、机器翻译、语音识别、情感分析、问答系统等各项实际任务中。 要学习 Python 自然语言处理&#xff…

“河南省数字化转型与信息技术应用创新专家研讨会-政府数字化转型推动信创产业发展”专场活动成功召开

由《中国信息化》杂志社主办的“2023河南省数字化转型与信息技术应用创新专家研讨会——政府数字化转型推动信创产业发展”专场活动于5月27日,在郑州成功举办。本次活动由深圳竹云科技股份有限公司协办,由河南省测绘学会、中国信息主管平台支持。中国交通…

Windows 安装部署 MinIo

1、下载地址 安装包下载地址:https://min.io/download#/windows 2、安装目录 下载的是一个可执行文件 minio.exe 将其放到一个方便寻找的目录,我这里放在 D:\develop\minio 同时新建一个 data 文件夹,用来存储上传的文件 3、启动 MinIo 服…

Godot引擎 4.0 文档 - 第一个 3D 游戏

本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面: Your first 3D game — Godot Engine (stable) documentation in English 你的第一个 3D 游戏 在这个循序渐进的教程系列中,您将使用 Godot 创建您的第一…

Java程序设计入门教程 -- 二维数组

二维数组创建 定义数组 声明二维数组 Java中二维数组的声明格式: 数据类型名[ ][ ] 数组名; 或 数据类型名 数组名[ ][ ]; 分配数组内存 常用格式: new 数组名[ M][N ] ; //M,N为数组行号和列号 分配数组内存 1)规…

chatgpt赋能python:Python的几次方符号介绍

Python的几次方符号介绍 当我们在使用Python编程时,经常需要进行数学计算。其中最常见的计算就是幂运算。Python使用幂运算符号来表示一个数的几次方。这个符号既可以用在数字之间,也可以用在变量之间。在本文中,我们将介绍Python中的几次方…

堆基础1_小白垃圾笔记

小白垃圾笔记,不建议阅读。 目录 1.什么是堆? 2.堆从哪里来? 3.堆管理器是什么 4.堆申请的实现方式 1.brk:brk仅仅主线程申请小空间的时候用,子线程不可调用brk。 2.mmap:主线程申请大的内存的时候和…

Mysql小知识 delete 清空表之后,磁盘空间未发生变化?

1. 删除空洞 1.1 案例展示 首先我们先来看这样一个例子。 我现在有一个名为 sakila 的数据库,该库中有一个 film 表,这个表中有 1000 条记录,我么先来看下这 1000 条记录占用了多少存储空间: 小伙伴们可以看到,这个…

Go-FastDFS 本地对象存储,Windows环境搭建(下载安装教程)!

文章目录 Go-FastDFS简介与地址下载安装服务与管理端台可视化测试 Go-FastDFS简介与地址 go-fastdfs 是一个基于 http 协议的分布式文件系统! 它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高性…

Elasticsearch:使用带有 X-Opaque-Id 的慢速查询功能在 Elasticsearch 中调试慢速查询

如果你在软件堆栈中使用 Elasticsearch,你可能已经意识到 Elasticsearch 管理大量数据和提供实时搜索功能的强大能力。 了解 Elasticsearch 中的慢速查询 Slow Log 是 Elasticsearch 的内置功能,可用于识别慢速搜索。 任何花费时间超过预期的请求都会记…

Paper reading: Conditional Diffusion for Interactive Segmentation ICCV2021

交互式语义分割 We propose Conditional Diffusion Network (CDNet), which propagates labeled representations from clicks to conditioned destinations with two levels of affinities: Feature Diffusion Module (FDM) spreads features from clicks to potential targ…

单例模式-图文详解

概念 全世界就只要一个---在整个java程序中,只有这个类的一个实例 比如Student a new Student(); 就是Student类只创建这一个实例,只能有这一个对象存在 主要解决:一个全局使用的类频繁地创建与销毁。在内存里只有一个实例,减…

【白话机器学习系列】白话张量

白话张量 张量(Tensor)是向量和矩阵向 n n n 维的推广。向量是一维张量,矩阵是二维张量。张量作为数值容器,是机器学习,尤其是深度学习中最基础的操作对象,以至于 Google 的机器学习框架都已 TensorFlow …

ffmpeg在windows环境下的详细安装教程

这两天整理好用的录屏软件,发现了Captura这个软件,软件本身的安装很简单,但由于Captura需要依赖ffmpeg(一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序),而ffmpeg在安…

springboot X-Accel-Redirect 大文件下载实现

文章目录 前言一、什么是 X-Sendfile?二、相关请求头说明三、食用步骤总结 前言 文件下载的方式: nginx代理附件路径,直接访问。无法控制用户的权限。服务端流式读取文件内容。这个过程需要后端进程将文件读取到内存中然后再发给用户&#…

全民开发|零代码平台搭建库存管理系统,助力企业降本增效

什么是库存管理系统 库存管理系统是一种用于监控和跟踪商业组织存货的系统机软件。它帮助企业管理其库存,确保所需的商品和服务始终可用,并在需要时提供报告和预测。库存管理系统可追踪库存级别、库存周转率、订单、销售和交付等方面的数据,…

LIS系统源码

LIS系统(Laboratory Information System) 即实验室(检验科)信息系统,它是医院信息管理的重要组成部分之一,自从人类社会进入信息时代,信息技术的迅速发展加快了各行各业现代化与信息化的进程。LIS系统逐步采用了智能辅…