SpringBoot接口正确接收时间参数的几种方式

 更新时间:2023年09月06日 11:02:12   作者:全栈小白.  
这篇文章主要给大家介绍了关于SpringBoot接口正确接收时间参数的相关资料,文中通过代码示例介绍的非常详细,对大家学习或者使用springboot具有一定的参考借鉴价值,需要的朋友可以参考下

唠嗑部分

在做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注解即可。

到此这篇关于SpringBoot接口正确接收时间参数的文章就介绍到这了,更多相关SpringBoot接口接收时间参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • @RequestParam 接收参数的值为null的处理方式

    @RequestParam 接收参数的值为null的处理方式

    这篇文章主要介绍了@RequestParam 接收参数的值为null的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • spring-boot中使用spring-boot-devtools的实现代码

    spring-boot中使用spring-boot-devtools的实现代码

    这篇文章主要介绍了spring-boot中使用spring-boot-devtools的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Spring整合Quartz定时任务并在集群、分布式系统中的应用

    Spring整合Quartz定时任务并在集群、分布式系统中的应用

    这篇文章主要介绍了Spring整合Quartz定时任务并在集群、分布式系统中的应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • @JsonFormat 实现日期格式自动格式化

    @JsonFormat 实现日期格式自动格式化

    这篇文章主要介绍了@JsonFormat 实现日期格式自动格式化,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Seata AT模式前后镜像是如何生成详解

    Seata AT模式前后镜像是如何生成详解

    这篇文章主要为大家介绍了Seata AT模式前后镜像是如何生成的方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • springboot配置aop切面日志打印过程解析

    springboot配置aop切面日志打印过程解析

    这篇文章主要介绍了springboot配置aop切面日志打印过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Springboot读取templates文件html代码实例

    Springboot读取templates文件html代码实例

    这篇文章主要介绍了Springboot读取templates文件html代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • SpringBoot读取Nacos上配置文件的步骤详解

    SpringBoot读取Nacos上配置文件的步骤详解

    在 Spring Boot 应用程序中,可以使用 Spring Cloud Nacos 来实现从 Nacos 服务注册中心和配置中心读取配置信息,本文介绍如何在 Spring Boot 中读取 Nacos 上的配置文件的步骤,需要的朋友可以参考下
    2024-03-03
  • SpringBoot Admin的简单使用的方法步骤

    SpringBoot Admin的简单使用的方法步骤

    本文主要介绍了SpringBoot Admin的简单使用的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 实例详解MyBatis-plus自动填充功能

    实例详解MyBatis-plus自动填充功能

    每次对数据进行新增、删除、修改时都需要对这些字段进行设置,虽然新增时间和修改时间可以使用数据库的时间,但是新增人和修改人就不能使用这样的功能,下面小编给大家介绍下MyBatis-plus自动填充功能的实例代码,感兴趣的朋友一起看看吧
    2022-01-01

最新评论