使用 Spring MVC 时,很多业务场景下 Controller 需要接收日期时间参数。一个简单的做法是使用 String 接收日期时间字符串(例如:2020-01-29),然后在代码中将其转换成 Java 8 的日期时间类型或 java.util.Date 类型。这种方法虽然简单,但是当有多个 Controller 接收日期参数时,这种方法就显得有些繁琐了。

另一个做法是使用以下两个 Spring 提供的注解,可以很好地满足上述需求。

org.springframework.web.bind.annotation.RequestParam
org.springframework.format.annotation.DateTimeFormat

RequestParam 比较常见,用于标注 Controller 中方法的参数;DateTimeFormat 用于声明一个对象属性或者方法参数会被格式化为日期或时间。两个注解结合使用时,Spring 会调用 FormattingConversionService.convert(Object, TypeDescriptor, TypeDescriptor) 将日期时间字符串转换成日期时间类型。

示例如下:

一、将 2020-01-29 转换成 LocalDate;

二、将 12:25:30 转换成 LocalTime;

三、将 2020-01-29 12:25:30 转换成 LocalDateTime。

 1 @RestController
2 @RequestMapping("/test")
3 public class TestController {
4
5 @GetMapping("/date")
6 public LocalDate showDate(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date) {
7 return date;
8 }
9
10 @GetMapping("/time")
11 public LocalTime showTime(@RequestParam @DateTimeFormat(pattern = "HH:mm:ss") LocalTime time) {
12 return time;
13 }
14 @GetMapping("/dateTime")
15 public LocalDateTime showDateTime(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime dateTime) {
16 return dateTime;
17 }
18 }

第 1 个方法中的使用的是 iso = DateTimeFormat.ISO.DATE,第 3 个方法中使用的是 pattern = "yyyy-MM-dd HH:mm:ss"。因为第 1 个方法接收的日期字符串符合 ISO 的日期格式 yyyy-MM-dd,所以直接使用使用 DateTimeFormat.ISO 枚举类中定义好的日期格式。第 3 个方法接收的日期时间字符串不符合 ISO 的日期时间格式 yyyy-MM-dd'T'HH:mm:ss.SSSXXX,所以使用 pattern 指定自定义的日期时间格式。第 2 个方法与第 3 个方法原理相同。

对于任何日期时间格式均可使用 pattern 来指定,所以第 1 个方法中也可以使用 pattern = "yyyy-MM-dd" 指定。

Spring MVC 接收 LocalDate、LocalTime 和 LocalDateTime Java 8 时间类型参数的更多相关文章

  1. 如何让Spring MVC接收的参数可以转换为java对象

    场景: web.xml中增加了一个DispatcherServlet配置,并在同级目录下添加了**-servlert.xml文件,搭建起了一个spring mvc的restful访问接口. 问题描述: ...

  2. 【spring mvc】后台spring mvc接收List参数报错如下:org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface

    后台spring mvc接收List参数报错如下:org.springframework.beans.BeanInstantiationException: Failed to instantiate ...

  3. spring mvc接收ajax提交的JSON数据,并反序列化为对象

    需求:spring mvc接收ajax提交的JSON数据,并反序列化为对象,代码如下: 前台JS代码: //属性要与带转化的对象属性对应 var param={name:'语文',price:16}; ...

  4. spring mvc接收数组

    (一)前言 对于springmvc接收数组的问题啊,我试验过几次,但是了有时候成功了,有时候失败了,也不知道为啥的,然后现在又要用到了,所以打算具体看看到底怎么回事,但是了我实验成功了顺便找了好多资料 ...

  5. Spring MVC接收参数(Map,List,JSON,Date,2个Bean)(记录一次面试惨状)

    题目Spring MVC 接收参数 MapListDate2个BeanJSON Spring MVC接收参数 -Map Spring MVC接收参数 -List Spring MVC接收参数 -dat ...

  6. 使用Spring mvc接收整个url地址及参数时注意事项

    使用Spring mvc接收整个url地址及参数时注意事项:url= http://baidu?oid=9525c1f2b2cd45019b30a37bead6ebbb&td=2015-08- ...

  7. spring mvc 接收页面表单List

    很少写博客,如果写的不好请多多包涵! 最近在用Spring mvc时遇到一个问题,在网上搜了很多资料.几乎没看到解决办法! 例如:当我们在做批量添加或者更新时,在Controller层接收表单数据的问 ...

  8. Spring MVC + Security 4 初体验(Java配置版)

    spring Version = 4.3.6.RELEASE springSecurityVersion = 4.2.1.RELEASE Gradle 3.0 + Eclipse Neno(4.6) ...

  9. spring mvc 接收表单 bean

    spring MVC如何接收表单bean 呢? 之前项目中MVC框架一直用struts2,所以我也就按照struts2 的思维来思考 页面loginInput.jsp: <?xml versio ...

随机推荐

  1. JSON类型解析

    JSON类型解析 一.序列化和反序列化 程序中的对象,如python中的字典.列表.函数.类等,都是存在内存中,不方便传递或存储,所以需要将内存中的对象转化为文本或者文件格式,来满足传输和持久化(存储 ...

  2. oracle11g ADG主备切换

    oracle11g ADG主备切换 1.主库 SQL> select name,open_mode,switchover_status from v$database; NAME OPEN_MO ...

  3. Linux查看、开启、关闭防火墙操作

    一.防火墙区别 CentOS6自带的防火墙是iptables,CentOS7自带的防火墙是firewall. iptables:用于过滤数据包,属于网络层防火墙. firewall:底层还是使用 ip ...

  4. hive dml语法

    Loading files into tables 语法 1 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename ...

  5. selenium IDE使用-1

    selenium 硒 Mercury汞,外国人喜欢取这化学的名字 一.selenium概述 1.selenium是开源免费的,针对web应用程序功能自动化测试的工作. 2.做功能自动化的原因:回归测试 ...

  6. xss未看完的文章

    https://blog.csdn.net/fen0707/article/details/8596888                XSS介绍与攻击 http://xss.fbisb.com/w ...

  7. angular8

    @Component 装饰器告诉Angular , AppComponent 类是一个组件,装饰器的属性用于配置该组件的应用方式. selectot 属性告诉Angular如何在HTML文档中应用该组 ...

  8. 简单的堆排序-python

    AA = raw_input().strip().split(' ') A = [] ###############初始化大堆############### def fixUp(A): k = len ...

  9. Android 开源框架 -Toasty

    GitHub地址 用法: 第一步:根目录的 build.gradle: allprojects { repositories { ... maven { url "https://jitpa ...

  10. 1.Redis基础命令

    重要概念 redis是单线程模型,所有命令都会进入一个队列,然后依次被执行. 全局命令 >>>select dbindex #切换数据库,默认有16个库,库标识符为0-15 > ...