Java:jackson处理LocalDateTime序列化的时候报错InvalidDefinitionException

简介: Java:jackson处理LocalDateTime序列化的时候报错InvalidDefinitionException

目录

问题描述

解决方法

问题描述

jackson处理LocalDateTime序列化的时候报错


ObjectMapper mapper = new ObjectMapper();


mapper.writeValueAsString(LocalDateTime.now());


报错信息


com.fasterxml.jackson.databind.exc.InvalidDefinitionException:

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

add Module "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" to enable handling


如果处理Date对象是不会报错的


ObjectMapper mapper = new ObjectMapper();


mapper.writeValueAsString(new Date());

// 1684480558531


解决方法

按照异常信息提示,引入模块com.fasterxml.jackson.datatype:jackson-datatype-jsr310


引入依赖


<!-- json -->

<dependency>

   <groupId>com.fasterxml.jackson.core</groupId>

   <artifactId>jackson-databind</artifactId>

   <version>2.13.4</version>

</dependency>


<dependency>

   <groupId>com.fasterxml.jackson.datatype</groupId>

   <artifactId>jackson-datatype-jsr310</artifactId>

   <version>2.13.4</version>

</dependency>



注册JavaTimeModule


ObjectMapper mapper = new ObjectMapper();


// 已过时

// mapper.registerModule(new JSR310Module());

// Jackson 2.7 之后使用JavaTimeModule

mapper.registerModule(new JavaTimeModule());


// 默认输出

mapper.writeValueAsString(LocalDateTime.now())

[2023,5,19,15,21,57,337000000]


发现输出的格式不太对,进一步优化


ObjectMapper mapper = new ObjectMapper();


JavaTimeModule javaTimeModule = new JavaTimeModule();

// 设置序列化格式

javaTimeModule.addSerializer(LocalDateTime.class,

       new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));

mapper.registerModule(javaTimeModule);


try {

   System.out.println(mapper.writeValueAsString(LocalDateTime.now()));

   // "2023-05-19 15:29:01"

} catch (JsonProcessingException e) {

   e.printStackTrace();

}


完整测试代码


package com.example.demo;


import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

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

import org.junit.jupiter.api.Test;


import java.time.LocalDateTime;

import java.time.format.DateTimeFormatter;


public class JsonTest {

   @Test

   public void testJavaTimeModule() {

       ObjectMapper mapper = new ObjectMapper();


       JavaTimeModule javaTimeModule = new JavaTimeModule();

       // 设置序列化格式

       javaTimeModule.addSerializer(LocalDateTime.class,

               new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));

       mapper.registerModule(javaTimeModule);


       try {

           System.out.println(mapper.writeValueAsString(LocalDateTime.now()));

           // "2023-05-19 15:29:01"

       } catch (JsonProcessingException e) {

           e.printStackTrace();

       }

   }

}


参考

使用Jackson JSR310模块反序列化LocalDateTime

————————————————

版权声明:本文为CSDN博主「彭世瑜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/mouday/article/details/130767915

相关文章
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
201 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
226 1
|
4月前
|
存储 Java
Java LocalDateTime与hutool DateUtil实现秒转换为时分秒格式化展示。
注意:以上代码示例仅适合于处理小于24小时内(86400s) 总积 因 LocalDateTime 和 Local Time 不支持超过24小时表达而 huo tool示例虽然理论上支持但未考虑超过24小时情况下可能出现负值等异常情况处理细节需用户自行添加相关逻辑以确保正确性.
356 7
|
5月前
|
存储 安全 Java
深入理解Java序列化接口及其实现机制
记住,序列化不仅仅是把对象状态保存下来那么简单,它涉及到类的版本控制、安全性和性能等多个重要方面。正确理解和实现Java序列化机制对于构建高效、安全和可维护的Java应用至关重要。
219 0
|
6月前
|
JSON Java 数据库连接
|
JSON NoSQL Java
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
这篇文章介绍了在Java中使用Redis客户端的几种方法,包括Jedis、SpringDataRedis和SpringBoot整合Redis的操作。文章详细解释了Jedis的基本使用步骤,Jedis连接池的创建和使用,以及在SpringBoot项目中如何配置和使用RedisTemplate和StringRedisTemplate。此外,还探讨了RedisTemplate序列化的两种实践方案,包括默认的JDK序列化和自定义的JSON序列化,以及StringRedisTemplate的使用,它要求键和值都必须是String类型。
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
304 5
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
存储 缓存 安全
🌟Java零基础:深入解析Java序列化机制
【10月更文挑战第20天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
215 3
|
Java 数据库 对象存储
Java 序列化详解
本文详细解析了Java序列化的概念与应用。通过具体实例,深入探讨了其在对象存储和传输中的作用及实现方法,帮助读者理解如何有效利用这一特性来简化数据交换,并对其实现机制有了更深入的认识。
253 9