1. 准备

定义一个pojo,它有一个 java.util.Date 类型的属性 date。

import java.util.Date;

public class DateVo {
private Date date; public void setDate(Date date){
this.date = date;
}
public Date getDate(){
return date;
}
}

定义一个Controller

@RestController
@RequestMapping("/date/")
public class DateController { @RequestMapping("test")
public DateVo getDate(DateVo vo){
System.out.println("date1:"+vo.getDate()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = sdf.format(vo.getDate());
System.out.println("date2:"+date); DateVo vo2 = new DateVo();
vo2.setDate(new Date());
return vo2;
}
}

访问 /date/test ,并传入参数:2018-08-02 22:05:55

发现并不能访问成功,会抛出异常:

因为传入的参数是 String 类型的,而用来接收参数的 DateVo 的 date 属性是 java.util.Date 类型的,类型无法转换。

2. 入参格式化

这时,就可以使用 Spring 的 @DateTimeFormat 注解格式化参数,来解决上述问题。

改造 DateVo:

public class DateVo {
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date date; public void setDate(Date date){
this.date = date;
}
public Date getDate(){
return date;
}
}

再像上面一样访问 /date/test ,并传入参数:2018-08-02 22:05:55,将在控制台上打印:

  date1:Thu Aug 02 22:05:55 CST 2018

  date2:2018-08-02 22:05:55

可以看到,加入 @DateTimeFormat 注解后参数可以被接收到了,但日期时间的格式还是需要自己再手动转换一下

因为 @DateTimeFormat 注解的 pattern 属性值指定的日期时间格式并不是将要转换成的日期格式,这个指定的格式是和传入的参数对应的,假如注解为:

@DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss")

则传入的参数应该是这样的:

  2018/08/02 22:05:55

否则会抛出异常。

3. 出参格式化

在上述示例中,调用接口的返回结果为:

  "date": "2018-08-01T14:25:31.296+0000"

这个格式并不是我们想要的,那么如何将其进行格式化?这时就需要用到 jackson 的 @JsonFormat 注解。

改造 DateVo:

public class DateVo {
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date date; public void setDate(Date date){
this.date = date;
}
public Date getDate(){
return date;
}
}

继续访问 /date/test ,并传入参数:2018-08-02 22:05:55,可以看到接口返回的结果为:

"date": "2018-08-01 14:32:57"

虽然时间格式正确了,但实际上当前时间是 “2018-08-01 22:32:57” ,早了8个小时。因为,jackson在序列化时间时是按照国际标准时间GMT进行格式化的,而在国内默认时区使用的是CST时区,两者相差8小时。

所以,@JsonFormat 注解还要再加一个属性:

@JsonFormat(
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "GMT+8"
)
private Date date;

这样,结果就正确了。

因为 @JsonFormat 注解不是 Spring 自带的注解,所以使用该注解前需要添加 jackson 相关的依赖包。当然,如果是 SpringBoot 项目就不需要自己手动添加依赖了,因为在 spring-boot-start-web 下已经包含了 jackson 相关依赖。

---------------------
作者:月下泛舟
来源:CSDN
原文:https://blog.csdn.net/zhou520yue520/article/details/81348926

最新文章

  1. wex5 实战 框架拓展之1 公共data组件(Data)
  2. TCP、UDP、RTP(RTCP)异同与区别
  3. Quartz任务调度快速入门(转)
  4. 定义declare、%TYPE%、ROWTYPE、加循环
  5. .NET技术+25台服务器怎样支撑世界第54大网站(转)
  6. ionic ngcordova map 地圖
  7. 编辑器CocoStudio和CocosBuilder的对比
  8. 微信公众号与HTML 5混合模式揭秘2——分享手机相册中照片
  9. CSS_网站配色参考方案
  10. C++笔记1: 单例模式。(一个简单的设计模式在C++中复杂出翔。。)
  11. Eclipse常用热键
  12. 学习MVC之租房网站(三)-编写实体类并创建数据库
  13. LxNx前端F2F面试问题整理
  14. Vuthink正确安装过程
  15. (转)学习HTML5 Canvas这一篇文章就够了
  16. POJ 2251 Dungeon Master (非三维bfs)
  17. PAT 乙级 1079 延迟的回文数(20 分)
  18. jmeter压测前清理内存
  19. yum使用过程中的常见错误
  20. JavaScript的arguements

热门文章

  1. StopWatch方法详解
  2. Python运算符大全
  3. 大数据之kafka-02.搞定kafka专业术语
  4. python smtp登陆邮箱失败
  5. 三、Linux_环境变量
  6. pyecharts绘制map地图
  7. [LeetCode] 0200. Number of Islands 岛屿的个数
  8. 将mysql从MyISAM更改为INNODB
  9. springboot 整合Swagger2的使用
  10. python开发笔记-ndarray方法属性详解