news 2026/4/15 19:55:29

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/4/16 2:47:20

AI知识库(2)豆包AI手机介绍

“豆包AI手机”并不是由字节跳动独立生产的一款品牌手机&#xff0c;而是由字节跳动豆包团队与主流手机厂商&#xff08;目前主要是中兴旗下的努比亚&#xff09;深度合作打造的“AI智能体手机”。在2025年底到2026年初这段时间&#xff0c;这款手机因其颠覆性的交互方式在科技…

作者头像 李华
网站建设 2026/4/16 4:30:20

深度测评!研究生必备10款AI论文软件:开题报告到毕业论文全解析

深度测评&#xff01;研究生必备10款AI论文软件&#xff1a;开题报告到毕业论文全解析 学术写作新趋势&#xff1a;AI工具如何助力研究生高效完成论文 随着人工智能技术的不断进步&#xff0c;越来越多的研究生开始依赖AI论文软件来提升写作效率、优化内容质量。从开题报告到最…

作者头像 李华
网站建设 2026/4/16 4:35:42

无人机群控系统抗干扰测试技术白皮书

‌一、抗干扰测试的核心挑战‌‌多维度干扰场景建模‌‌电磁频谱干扰‌&#xff1a;4G/5G基站、军用雷达频段冲突导致信号淹没‌环境物理干扰‌&#xff1a;城市峡谷效应、强风紊流引发定位漂移‌恶意攻击场景‌&#xff1a;GPS欺骗、数据链路劫持威胁系统安全测试要点&#xf…

作者头像 李华
网站建设 2026/4/16 4:30:12

数字人民币双离线支付技术原理与测试挑战

一、双离线支付的核心机制‌硬件级安全载体‌基于NFC/蓝牙的SE安全芯片通信离线电子钱包的密钥分片存储&#xff08;TEE环境&#xff09;交易凭证的预生成与有效期控制‌交易时序逻辑‌二、测试工程师的专项验证矩阵测试维度关键场景验证要点‌功能完整性‌无网环境交易凭证生成…

作者头像 李华
网站建设 2026/4/16 4:35:36

Kbuild:Linux内核构建系统的深度剖析

Kbuild&#xff1a;Linux内核构建系统的深度剖析 引言&#xff1a;当百万行代码需要有序构建 想象一下构建一个包含3000万行代码、2万个C文件、支持上百种处理器架构的操作系统内核。这就是Linux内核面临的构建挑战。自1991年诞生以来&#xff0c;Linux内核不仅成长为世界上最成…

作者头像 李华
网站建设 2026/4/16 4:30:53

JSP网页中如何编写支持秒传的大文件上传示例?

大文件传输系统建设方案&#xff08;项目负责人视角&#xff09; 一、项目背景与需求分析 作为河北XX软件公司项目负责人&#xff0c;针对产品部门提出的大文件传输需求&#xff0c;经过详细技术调研和业务分析&#xff0c;现提出以下系统性解决方案。该需求涉及100G级文件传…

作者头像 李华