news 2026/7/2 5:13:58

InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
InvalidDefinitionException: Java 8 date/time type `java.time.LocalDateTime` not supported by default

Jackson日期时间配置说明

问题描述

在使用Java 8的LocalDateTimeLocalDateLocalTime等时间类型时,Jackson默认不支持序列化和反序列化,会抛出以下异常:

​​​​​​​InvalidDefinitionException: Java 8 date/time type `java.time

解决方案

已创建JacksonConfig配置类来解决此问题。

配置文件位置

JacksonConfig.java

import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; @Configuration public class JacksonConfig { /** * 日期时间格式 */ private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; private static final String DATE_PATTERN = "yyyy-MM-dd"; private static final String TIME_PATTERN = "HH:mm:ss"; @Bean @Primary public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); // 注册JavaTimeModule,支持Java 8时间类型 JavaTimeModule javaTimeModule = new JavaTimeModule(); // LocalDateTime序列化和反序列化 javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN))); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN))); // LocalDate序列化和反序列化 javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_PATTERN))); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DATE_PATTERN))); // LocalTime序列化和反序列化 javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(TIME_PATTERN))); javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(TIME_PATTERN))); objectMapper.registerModule(javaTimeModule); // 配置序列化特性 // 禁用将日期序列化为时间戳 objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); // 禁用将日期作为时间戳写入 objectMapper.disable(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS); // 配置反序列化特性 // 忽略未知属性 objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); // 允许空对象 objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); return objectMapper; } }

配置内容

  1. 注册JavaTimeModule模块

    • 支持Java 8时间类型的序列化和反序列化
  2. 配置日期时间格式

    • LocalDateTime:yyyy-MM-dd HH:mm:ss
    • LocalDate:yyyy-MM-dd
    • LocalTime:HH:mm:ss
  3. 其他配置

    • 禁用将日期序列化为时间戳
    • 忽略未知属性
    • 允许空对象

使用示例

实体类定义

@Data public class BaseEntity { private Long id; private LocalDateTime createTime; // 自动格式化为 yyyy-MM-dd HH:mm:ss private LocalDateTime updateTime; // 自动格式化为 yyyy-MM-dd HH:mm:ss }

API返回示例

{ "code": 200, "success": true, "data": { "id": 1, "username": "admin", "createTime": "2025-01-15 10:30:00", "updateTime": "2025-01-15 10:30:00" } }

API请求示例

{ "username": "test", "realName": "测试用户", "createTime": "2025-01-15 10:30:00" }

注意事项

  1. 全局配置

    • 所有的LocalDateTimeLocalDateLocalTime字段都会自动应用配置的格式
    • 不需要在每个字段上添加@JsonFormat注解
  2. 自定义格式

    • 如果某个字段需要特殊格式,可以使用@JsonFormat注解覆盖全局配置
    @JsonFormat(pattern = "yyyy/MM/dd") private LocalDate specialDate;
  3. 时区问题

    • 当前配置使用系统默认时区
    • 如需指定时区,可以在@JsonFormat中添加timezone属性
  4. 兼容性

    • 配置已添加到Spring容器中,自动应用于所有HTTP请求和响应
    • 也适用于手动使用ObjectMapper进行序列化和反序列化

相关依赖

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

此依赖已在pom.xml中配置,Spring Boot会自动管理版本。




​​​​​​​

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/29 10:41:04

深度测评10个AI论文网站,本科生轻松搞定毕业论文!

深度测评10个AI论文网站&#xff0c;本科生轻松搞定毕业论文&#xff01; AI 工具助力学术写作&#xff0c;让论文不再难 对于许多本科生来说&#xff0c;撰写毕业论文是大学生活中最具挑战性的任务之一。从选题到资料收集&#xff0c;再到大纲搭建和初稿撰写&#xff0c;每一…

作者头像 李华
网站建设 2026/6/26 10:57:39

django-flask基于python的车辆挡泥板机器人工厂管理系统

目录基于Python的车辆挡泥板机器人工厂管理系统摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于Python的车辆挡泥板机器人工厂管理系统摘要 该系统采用Django和Flask框架开…

作者头像 李华
网站建设 2026/6/26 13:26:37

如何使用SpringAI来实现一个RAG应用系统

RAG原理大模型没有本地私有知识&#xff0c;所以用户在向大模型提问的时候&#xff0c;大模型只能在它学习过的知识范围内进行回答&#xff0c;而RAG就是在用户在提问的时候 将本地与问题相关的私有知识连同问题一块发送给大模型&#xff0c;进而大模型从用户提供的私有知识范围…

作者头像 李华
网站建设 2026/6/25 23:45:44

leetcode 872. Leaf-Similar Trees 叶子相似的树-耗时100

Problem: 872. Leaf-Similar Trees 叶子相似的树 解题过程 耗时100%&#xff0c;前序遍历的&#xff0c;拿到叶子节点&#xff0c;顺序默认从左到右&#xff0c;判断两者是否相等 Code /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNo…

作者头像 李华
网站建设 2026/7/1 15:17:28

适合PPT汇报的扁平化图片素材哪里找?10个优质网站推荐!

很多小伙伴在准备PPT汇报时&#xff0c;都会为找不到合适的图片素材而头疼。太复杂的图片容易分散观众注意力&#xff0c;太普通的又显得缺乏专业感。而扁平化设计的图片凭借简洁的线条、明快的色彩和极简的风格&#xff0c;正好能解决这个问题——它们既能突出重点&#xff0c…

作者头像 李华
网站建设 2026/6/25 17:49:46

2026精选10个商业海报背景图网站:设计师必藏!

对于设计师来说&#xff0c;找一张合适的商业海报背景图简直是日常工作中的“小难题”——既要高清美观&#xff0c;又要符合品牌调性&#xff0c;最好还能免费商用。尤其是在商业场景下&#xff0c;背景图的选择直接影响海报的传播效果和品牌形象。今天&#xff0c;我们就来盘…

作者头像 李华