返回

一招解决Spring Boot 2.5报错:LocalDateTime 得到了 JSON 支持!

后端

Spring Boot 2.5 中使用 Java 8 LocalDateTime 的终极指南

前言

作为 Java 开发者,你一定听说过 Spring Boot,它是一个简化开发流程的框架,让你能够迅速构建 RESTful API 和微服务。在 Spring Boot 2.5 版本中,JSON 处理方面有了重大改进,它默认采用 Jackson 作为 JSON 处理库。然而,如果你想在 JSON 中使用 Java 8 的 LocalDateTime 类型,你可能会遇到一个错误:"java.time.LocalDateTime not supported by default"。

问题根源

在 Spring Boot 2.5 中,默认情况下不包含对 Java 8 日期时间 API 的支持。这是因为 Jackson 库默认不支持 Java 8 日期时间 API。当你尝试将 LocalDateTime 对象转换为 JSON 时,就会抛出错误。

解决方案

解决这个问题的方法很简单,只需添加 Jackson 的 jackson-datatype-jsr310 模块即可。这个模块提供了对 Java 8 日期时间 API 的支持。你可以按照以下步骤添加这个模块:

  1. 在项目中添加 jackson-datatype-jsr310 的依赖。
  2. 在主配置类中启用 @EnableJackson2HttpMessageConverter 注解。
  3. 在你的实体类上使用 @JsonFormat 注解来指定 LocalDateTime 的格式。

代码示例:

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;

import java.time.LocalDateTime;

public class MyClass {

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime localDateTime;

    // 省略其他代码
}

小结

通过添加 Jackson 的 jackson-datatype-jsr310 模块,你就可以轻松地将 LocalDateTime 对象转换为 JSON。现在,你可以在 Spring Boot 2.5 中使用 Java 8 的日期时间 API 了。

常见问题解答

  1. 为什么 Spring Boot 2.5 默认不支持 Java 8 日期时间 API?
    Spring Boot 2.5 默认不支持 Java 8 日期时间 API,是因为 Jackson 库默认不支持它。

  2. 我可以在不使用 jackson-datatype-jsr310 模块的情况下解决这个问题吗?
    不可以,jackson-datatype-jsr310 模块是支持 Java 8 日期时间 API 的唯一方法。

  3. 如何指定 LocalDateTime 的格式?
    你可以使用 @JsonFormat 注解来指定 LocalDateTime 的格式。

  4. 是否可以将 LocalDateTime 转换为其他格式,例如纪元时间?
    是的,你可以使用 @JsonFormat 注解来指定任何你想要的格式。

  5. jackson-datatype-jsr310 模块对 Spring Boot 2.5 还有哪些其他好处?
    jackson-datatype-jsr310 模块不仅支持 LocalDateTime,还支持其他 Java 8 日期时间类型,如 LocalDate、LocalTime 和 ZonedDateTime。