• SpringBoot日期参数设置和Json序列化日期设置


    目录

    1、@DateTimeFormat(pattern = "yyyy-MM-dd")

    2、全局的DateFormat设置

    3、@JsonFormat(pattern = "yyyy-MM-dd")

    4、全局Json序列化日期设置

    【1】application.properties形式

    【2】配置文件格式


    前端时间组件,一般情况下直接会传一个yyyy-MM-dd的日期格式字符串到后台。

    这个时候如果我们直接用java.util.Date类型就无法正确接收到。或者我们从数据库里查到DateTime类型并且用java的Date类型接收并返回给前台的时候,前台也无法用yyyy-MM-dd的形式进行呈现。
    这个时候,前面两种情况分别对应了@DateTimeFormat(前端传入参数格式设置)和@JsonFormat(json序列化格式设置)注解的使用。
     

    User类

    1. package org.springframework.myspringboot.entity;
    2. import com.fasterxml.jackson.annotation.JsonFormat;
    3. import java.util.Date;
    4. /**
    5. * @author winnie
    6. * @PackageName:org.springframework.myspringboot.entity
    7. * @Description TODO
    8. * @date 2022/7/30 17:16
    9. */
    10. public class User {
    11. private String username;
    12. private int age;
    13. private Date birthday;
    14. @Override
    15. public String toString() {
    16. return "User{" +
    17. "username='" + username + '\'' +
    18. ", age=" + age +
    19. ", birthday=" + birthday +
    20. '}';
    21. }
    22. public User() {
    23. System.out.println("user的无参构造函数执行了");
    24. }
    25. public User(String username, int age, Date birthday) {
    26. this.username = username;
    27. this.age = age;
    28. this.birthday = birthday;
    29. }
    30. public String getUsername() {
    31. return username;
    32. }
    33. public void setUsername(String username) {
    34. this.username = username;
    35. }
    36. public int getAge() {
    37. return age;
    38. }
    39. public void setAge(int age) {
    40. this.age = age;
    41. }
    42. public Date getBirthday() {
    43. return birthday;
    44. }
    45. public void setBirthday(Date birthday) {
    46. this.birthday = birthday;
    47. }
    48. }

    这里我们传入的日期格式必须是这种2000/01/01,这种,如果是2000-01-01就会报错

    那么假设我们想要传入的日期格式是这种2000-01-01格式,该怎么做?

    1、@DateTimeFormat(pattern = "yyyy-MM-dd")

     

    2、全局的DateFormat设置

    可以在application.properties中设置

    使用注解@DateTimeFormat(pattern = "yyyy-MM-dd")确实可以定制我们传入的日期类型是什么,但是我们发现一个问题,就是返回的json数据中的日期还是国际的日期格式,那么就引出了第二个注解@JsonFormat(pattern = "yyyy-MM-dd")

    3、@JsonFormat(pattern = "yyyy-MM-dd")

    JSON序列化的时候我们的日期确实已经被序列化成我们需要的格式

    但是如果单纯使用这个注解,就会发现我们的传入的参数格式就必须是 / 类型,所以一般情况下,我们可以将两个注解一起结合使用

    4、全局Json序列化日期设置

    如果我们很多类中都有日期需要进行json序列化,那么我们一个个进行@JsonFormat会很麻烦,所以我们可以利用全局的json格式化来使用,这里要注意:我们在单个类中的@JsonFormat的优先级是比我们全局的高

    【1】application.properties形式

    【2】配置文件格式

    在HttpMessageConvertersAutoConfiguration的自动配置类中,引入了我们的jackjson,Jsonb,Gson的序列化类

     默认的json序列化的类是Jackson

    第一种方式:

    这里看到我们只要引入自己的json转换器MappingJackson2HttpMessageConverter,就可以替换原来的json的序列化规则

    1. package org.springframework.myspringboot.config;
    2. import com.fasterxml.jackson.databind.ObjectMapper;
    3. import org.springframework.context.annotation.Bean;
    4. import org.springframework.context.annotation.Configuration;
    5. import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
    6. import org.springframework.stereotype.Component;
    7. import java.text.SimpleDateFormat;
    8. /**
    9. * @author winnie
    10. * @PackageName:org.springframework.myspringboot.config
    11. * @Description TODO
    12. * @date 2022/8/4 10:32
    13. */
    14. @Configuration
    15. public class WebMvcConfig {
    16. //自定义json消息转换器
    17. @Bean
    18. MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
    19. MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(objectMapper);
    20. objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
    21. return converter;
    22. }
    23. }

    我们需要怎么进行json'的序列化,我们就可以直接在里面进行设置

    我们依旧要跟@DateTimeFormat配合使用

    第二种方式:

    我们这里看到,我们进行序列化设置的时候是跟ObjectMapper有关,springboot中是注入了自己的ObjectMapper

    那么我们可以注入自己的Objectmapper来代替springboot的,也可以达到一样的效果

  • 相关阅读:
    【题目讲解】序列变换
    JVS快速开发平台列表页配置
    超实用!推荐5款办公黑科技软件,用了就离不开
    redis集群
    三西格玛和六西格玛区别是什么?优思学院用一幅图告诉你
    学习pytorch12 神经网络-线性层
    公网Windows,MAC,LINUX远程操控
    abp(net core)+easyui+efcore实现仓储管理系统——ABP升级7.3上(五十八)
    cloudera manager - Error while committing the transaction
    [machineLearning]非监督学习unsupervised learning
  • 原文地址:https://blog.csdn.net/WinnerBear/article/details/126154204