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

相关文章
|
25天前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
37 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
1月前
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
77 5
|
1月前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
1月前
|
存储 缓存 安全
🌟Java零基础:深入解析Java序列化机制
【10月更文挑战第20天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
29 3
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
1月前
|
安全 小程序 Java
Java“AccessControlException”报错解决
Java中的“AccessControlException”通常发生在尝试访问受安全策略限制的资源时。解决方法包括:1. 检查安全策略文件(java.policy)配置;2. 确保代码具有足够的权限;3. 调整JVM启动参数以放宽安全限制。
127 1
|
3月前
|
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序列化)
|
2月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
2月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第3天】在Java编程的世界里,对象序列化与反序列化是实现数据持久化和网络传输的关键技术。本文将深入探讨Java序列化的原理、应用场景以及如何通过代码示例实现对象的序列化与反序列化过程。从基础概念到实践操作,我们将一步步揭示这一技术的魅力所在。
|
2月前
|
消息中间件 存储 Java
大数据-58 Kafka 高级特性 消息发送02-自定义序列化器、自定义分区器 Java代码实现
大数据-58 Kafka 高级特性 消息发送02-自定义序列化器、自定义分区器 Java代码实现
52 3