SpringMVC 4 请求与响应 4.5 日期类型参数传递

本文介绍SpringMVC框架中如何处理各种格式的日期参数,包括使用@DateTimeFormat注解指定日期格式,确保前后端日期数据的正确转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringMVC

【黑马程序员2022新版SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术】

4 请求与响应

4.5 日期类型参数传递

日期类型比较特殊,因为对于日期的格式有N多种输入方式,比如:

  • 2088-08-18
  • 2088/08/18
  • 08/18/2088

针对这么多日期格式,SpringMVC该如何接收

步骤1 编写方法接收日期数据

在UserController类中添加方法,把参数设置为日期类型

@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date){
    System.out.println("参数传递 date ==> " + date);
    return "{'module':'data param'}";
}
步骤2 启动Tomcat 服务器

在这里插入图片描述

OK,正常启动

步骤3 使用PostMan 发送请求

在这里插入图片描述

步骤4 查看控制台

在这里插入图片描述

通过打印发现SpringMVC可以接收日期数据类型,并将其打印在控制台。

步骤5 更换日期格式

在方法中多添加一个日期参数

在这里插入图片描述

使用PostMan发送请求,携带两个不同的日期格式,

在这里插入图片描述

运行

在这里插入图片描述

在这里插入图片描述

可以发现,页面报了400,控制台抛了一个警告

从错误信息可以看出,错误的原因是在将2088-08-18转换成日期类型的时候失败了,原因是SpringMVC默认支持的字符串转日期的格式为yyyy/MM/dd ,而现在传递的不符合其默认格式,SpringMVC就无法进行格式转换,所以报错。

【解决方案:使用@DateTimeFormat】

@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date , @DateTimeFormat(pattern = "yyyy-MM-dd") Date date1){
    System.out.println("参数传递 date ==> " + date);
    System.out.println("参数传递 date1(yyyy-MM-dd) ==> " + date1);
    return "{'module':'data param'}";
}

再试一次

在这里插入图片描述

OK。SpringMVC就可以正确的进行日期转换了

步骤6 携带时间的日期

修改UserController类,添加第三个参数

@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date , 
                        @DateTimeFormat(pattern = "yyyy-MM-dd") Date date1,
                        @DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss") Date date2){
    System.out.println("参数传递 date ==> " + date);
    System.out.println("参数传递 date1(yyyy-MM-dd) ==> " + date1);
    System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> " + date2);
    return "{'module':'data param'}";
}

使用PostMan发送请求,携带两个不同的日期格式

在这里插入图片描述

运行结果

在这里插入图片描述

OK,SpringMVC可以将日期时间的数据进行转换

【知识点1:@DateTimeFormat】

在这里插入图片描述

【内部实现原理】

【一个问题】

  • 前端传递字符串,后端使用日期Date接收
  • 前端传递JSON数据,后端使用对象接收
  • 前端传递字符串,后端使用Integer接收
  • 后台需要的数据类型有很多种
  • 在数据的传递过程中存在很多类型的转换

→ 谁做的类型转换【答:SpringMVC】

SpringMVC是如何实现类型转换的? → SpringMVC中提供了很多类型转换接口和实现类

在框架中,有一些类型转换接口,其中有:

  1. Converter接口

    /**
    * S: the source type
    * T: the target type
    */
    public interface Converter<S, T> {
        @Nullable
        //该方法就是将从页面上接收的数据(S)转换成我们想要的数据类型(T)返回
        T convert(S source);
    }
    

    注意:Converter所属的包为org.springframework.core.convert.converter

    Converter接口的实现类

    在这里插入图片描述

    框架中有提供很多对应Converter接口的实现类,用来实现不同数据类型之间的转换,如:

    • 请求参数年龄数据(String→Integer)
    • 日期格式转换(String → Date)
  2. HttpMessageConverter接口

    该接口是实现对象与JSON之间的转换工作

注意:SpringMVC的配置类把@EnableWebMvc当做标配配置上去,不要省略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祝我天天开心,平安健康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值