• @DateTimeFormat 和 @JsonFormat 的详细研究


    关于这两个时间转化注解,先说结论

    一、介绍

    1、@DateTimeFormat

    1. @DateTimeFormat 并不会根据得到其属性 pattern 把前端传入的数据转换成自己想要的格式,而是将前端的String类型数据封装到Date类型;其次它的 pattern 属性是用来规范前端传入数据的格式
    2. @DateTimeFormat 它用于前端日期String数据提交封装到日期Date数据类型中
    1. 示例1:前端传递的2023-09-23 17:10:30 后端采用@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 不会出错
    2. 示例2:前端传递的2023-09-23 17:10:30 后端采用@DateTimeFormat(pattern = "yyyy-MM-dd") 出错
    3. 示例3:前端传递的2023-09-23 后端采用@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") 不会出错

    2、 @JsonFormat

    1. @JsonFormat 会对前端传来的数据进行处理,按照其 pattern 属性定义把传入的数据转化
    2. @JsonFormat 同样会对后端传给前端的数据进行处理,按照其 pattern 属性定义直接进行截取返回给前端
    1. 示例1:前端传递的2023-09-23 17:10:30 后端采用@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 不会出错
    2. 示例2:前端传递的2023-09-23 17:10:30 后端采用@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") 不会出错
    3. 示例3:前端传递的2023-09-23 后端采用@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 出错

    二、代码演示

    创建实体类

    1. @Data
    2. public class Test1 {
    3. /**
    4. * 创建时间
    5. */
    6. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    7. private Date createTime;
    8. /**
    9. * 创建时间
    10. */
    11. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    12. private Date updateTime;
    13. /**
    14. * 创建时间
    15. */
    16. @DateTimeFormat(pattern = "yyyy-MM-dd")
    17. private Date createTime2;
    18. /**
    19. * 创建时间
    20. */
    21. @DateTimeFormat(pattern = "yyyy-MM-dd")
    22. private Date updateTime2;
    23. /**
    24. * 创建时间
    25. */
    26. @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    27. private Date createTime3;
    28. /**
    29. * 创建时间
    30. */
    31. @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    32. private Date updateTime3;
    33. /**
    34. * 创建时间
    35. */
    36. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    37. private Date createTime4;
    38. /**
    39. * 创建时间
    40. */
    41. @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    42. private Date updateTime4;
    43. }

    创建controller

    1. @RestController
    2. @RequestMapping("/test")
    3. public class TestController {
    4. @PostMapping("/test1")
    5. public ResultVo test1(@RequestBody Test1 test1) {
    6. System.out.println("test1 = " + test1);
    7. return ResultVo.success(test1);
    8. }
    9. }

    三、postman测试

    前端传递的时间类型为日期字符串类型(如:2023-09-22),后端采用 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")接收会出错

    前端传递的时间类型为时间字符串类型(如:2023-09-23 09:30:30),后端采用@DateTimeFormat(pattern = "yyyy-MM-dd")接收会报错

    关于时间返回类型

    createTime、createTime2前端传递日期字符串,后端采用@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")接收,controller处理完返回给前端的时间格式为日期Date

    createTime3、createTime4前端日期字符串,后端用@JsonFormat 对应的格式接收,按照其 pattern 属性定义直接进行截取返回给前端

  • 相关阅读:
    go pprof 如何使用 --chatGPT
    给rust的cargo环境或gnome构建器安装rust-analyzer
    Util应用框架基础(四) - 验证
    百度大模型文心一言api 请求错误码 一览表
    【Few Shot】batch-based 和 episodic-based 两种训练导入输入的区别
    MathType需要安装一个较新版本的MT Extra(TrueType)字体解决办法
    rust学习——智能指针
    Bert浅谈
    lio-sam框架:后端里程计、回环、gps融合
    欧姆龙PLC串口通讯详解
  • 原文地址:https://blog.csdn.net/bankq/article/details/133157470