SpringBoot jackson提供对LocalDate的支持方式

作者:myCat、 时间:2022-01-06 00:06:51 

jackson提供对LocalDate的支持

SpringBoot默认使用jackson来进行json格式转换,我们在配置文件中加入如下配置可以统一的改变Spring MVC返回值的日期格式类型

spring.jackson.date-format=yyyy-MM-dd
spring.jackson.time-zone=GMT+8
spring.jackson.serialization.write-dates-as-timestamps=false

但是这个配置对于java8新提供的日期APILocalDate、LocalDateTime等无效。

解决办法

引入依赖

<dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-jsr310</artifactId>
      <version>2.8.9</version>
</dependency>

启动主类添加如下代码

@SpringBootApplication
public class GroupApplication {
    public static void main(String[] args) {
        SpringApplication.run(GroupApplication.class, args);
    }
 
    /**
     * 提供jackson对LocalDate等java8提供的日期的序列化支持
     */
 
    @Bean(name = "mapperObject")
    public ObjectMapper getObjectMapper() {
        ObjectMapper om = new ObjectMapper();
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
        javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
        om.registerModule(javaTimeModule);
        return om;
    }
}

使用Jackson格式化LocalDate对象

LocalDate可以很方便的对日期进行处理,但是在返回给前端时,展示为如下的JSON结构:

{
    "dayOfWeek": "FRIDAY",
    "month": "JANUARY",
    "year": 2020,
    "dayOfMonth": 3,
    "era": "CE",
    "dayOfYear": 3,
    "monthValue": 1,
    "chronology": {
        "calendarType": "iso8601",
        "id": "ISO"
    }
}

前端组件就很难处理了。接下来,我们需要将此属性反序列化并从JSON字符串序列化。为此,我们可以使用@JsonDeserialize和@JsonSerialize来注释该类的LocalDate属性,时期成为前端组件需要的String格式。

实现LocalDateDeserializer和LocalDateSerializer

下面是LocalDateSerializerand LocalDateDeserializer类的定义。

public class LocalDateDeserializer extends StdDeserializer<LocalDate> {
    protected LocalDateDeserializer() {
        super(LocalDate.class);
    }
    @Override
    public LocalDate deserialize(JsonParser parser, DeserializationContext context) throws IOException {
        return LocalDate.parse(parser.readValueAs(String.class));
    }
}
public class LocalDateSerializer extends StdSerializer<LocalDate> {
    public LocalDateSerializer() {
        super(LocalDate.class);
    }
    @Override
    public void serialize(LocalDate value, JsonGenerator generator, SerializerProvider provider) throws IOException {
        generator.writeString(value.format(DateTimeFormatter.ISO_LOCAL_DATE));
    }
}

实体类添加注解

实体类添加如下的注解

    @JsonDeserialize(using = LocalDateDeserializer.class)
    @JsonSerialize(using = LocalDateSerializer.class)
    private LocalDate date;

来源:https://blog.csdn.net/WYA1993/article/details/86298545

标签:SpringBoot,jackson,LocalDate
0
投稿

猜你喜欢

  • Android ContentProvider查看/读取手机联系人实例

    2021-10-13 07:10:13
  • 详谈Enumeration接口和Iterator接口的区别

    2023-05-08 02:25:23
  • 深入探究Java线程的状态与生命周期

    2021-10-01 17:44:10
  • Android自定义ViewGroup之WaterfallLayout(二)

    2022-10-11 01:58:02
  • C#的静态工厂方法与构造函数相比有哪些优缺点

    2022-08-29 21:11:45
  • 深度解析Java中ArrayList的使用

    2023-06-16 23:26:01
  • ios百度地图的使用(普通定位、反地理编码)

    2023-07-03 15:26:17
  • Java获得当前时间前指定几个小时具体时间的方法示例

    2023-11-24 04:56:49
  • Android开发中Activity的生命周期及加载模式详解

    2021-07-28 02:33:44
  • Java web项目中的强制登录功能实现代码

    2023-09-14 08:26:18
  • Android实现在子线程中更新Activity中UI的方法

    2022-12-16 23:57:46
  • SpringBoot中的yaml语法及静态资源访问问题

    2021-09-27 20:32:38
  • JAVA使用POI获取Excel的列数与行数

    2021-10-03 12:53:37
  • Android ListView实现上拉加载下拉刷新和滑动删除功能

    2021-09-24 19:08:04
  • Android中ActionBar以及menu的代码设置样式

    2023-11-24 03:34:33
  • 详解Java程序读取properties配置文件的方法

    2022-03-09 17:26:23
  • c# 如何实现自动更新程序

    2021-11-20 21:02:41
  • 解决SpringCloud下spring-boot-maven-plugin插件的打包问题

    2022-03-10 14:35:59
  • 详解Spring Boot加载properties和yml配置文件

    2023-11-24 07:14:09
  • Unity Shader实现裁切效果

    2023-03-05 07:54:24
  • asp之家 软件编程 m.aspxhome.com