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/8 8:32:09

收藏必备!情境工程:大模型时代企业知识管理系统的革命性变革

文章探讨了情境工程如何重塑企业知识管理系统&#xff0c;从传统"文档存储检索"模式转变为"主动赋能"。通过场景感知、动态连接和人机协同进化&#xff0c;构建企业"智能认知中枢"&#xff0c;实现决策质量跃升、组织能力沉淀和创新加速。系统五…

作者头像 李华
网站建设 2026/4/15 7:00:04

电商源码系统集成海量促销功能,引爆销售增长

温馨提示&#xff1a;文末有资源获取方式在竞争激烈的电商市场&#xff0c;强大的营销能力是脱颖而出的核心。我们介绍一款集成了多种促销工具的电商源码系统&#xff0c;它专为提升销售和用户互动而设计&#xff0c;直接可用于商业运营&#xff0c;助您轻松实现业绩突破。以下…

作者头像 李华
网站建设 2026/4/15 9:35:04

当然这个表格不是我整理的,数据来源于网络,大家仅供参考,拿出来跟大家分享的目的也是跟大家一起交流讨论一下,毕竟每个人的背景和经历都不太一样,对于“难”字的定义肯定也有着不同的维度,大家也可以说出你心1

当然这个表格不是我整理的&#xff0c;数据来源于网络&#xff0c;大家仅供参考&#xff0c;拿出来跟大家分享的目的也是跟大家一起交流讨论一下&#xff0c;毕竟每个人的背景和经历都不太一样&#xff0c;对于“难”字的定义肯定也有着不同的维度&#xff0c;大家也可以说出你…

作者头像 李华
网站建设 2026/4/14 9:18:41

django-flask基于python的城市宠物医院管理系统的设计与实现

目录摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着城市化进程加快和宠物饲养率上升&#xff0c;宠物医疗需求显著增长。基于Python的Django-Flask框架设计的城市宠物…

作者头像 李华
网站建设 2026/4/12 22:32:01

AI优化服务公司全面盘点与对比分析

跟随人工智能技术于各行各业的渗透持续加深&#xff0c;各企业对于在线可达性与数字资产价值进行优化之时所产生的需求亦出现了根本性的改变&#xff0c;传统的搜索引擎优化也就是所谓的SEO策略逐步演变成了更为复杂、更为智能的被称作“AI优化”的体系 &#xff0c;依托机器学…

作者头像 李华