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中提供了很多类型转换接口和实现类
在框架中,有一些类型转换接口,其中有:
-
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)
-
HttpMessageConverter接口
该接口是实现对象与JSON之间的转换工作
注意:SpringMVC的配置类把@EnableWebMvc当做标配配置上去,不要省略