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

相关文章
|
4月前
|
Android开发
复杂项目即时通讯从android 5升级android x后遗症之解决报错#79 java.io.EOFException Unexpected end of ZLIB input stream-优雅草卓伊凡|bigniu
复杂项目即时通讯从android 5升级android x后遗症之解决报错#79 java.io.EOFException Unexpected end of ZLIB input stream-优雅草卓伊凡|bigniu
242 4
复杂项目即时通讯从android 5升级android x后遗症之解决报错#79 java.io.EOFException Unexpected end of ZLIB input stream-优雅草卓伊凡|bigniu
|
3月前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
207 3
|
2月前
|
JSON Java 数据格式
java调用服务报错400
java调用服务报错400
83 6
java调用服务报错400
|
2月前
|
JSON Java 数据格式
java调用服务报错415 Content type ‘application/octet-stream‘ not supported
java调用服务报错415 Content type ‘application/octet-stream‘ not supported
177 6
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
161 2
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
181 1
|
4月前
|
存储 Java
Java LocalDateTime与hutool DateUtil实现秒转换为时分秒格式化展示。
注意:以上代码示例仅适合于处理小于24小时内(86400s) 总积 因 LocalDateTime 和 Local Time 不支持超过24小时表达而 huo tool示例虽然理论上支持但未考虑超过24小时情况下可能出现负值等异常情况处理细节需用户自行添加相关逻辑以确保正确性.
302 7
|
5月前
|
存储 安全 Java
深入理解Java序列化接口及其实现机制
记住,序列化不仅仅是把对象状态保存下来那么简单,它涉及到类的版本控制、安全性和性能等多个重要方面。正确理解和实现Java序列化机制对于构建高效、安全和可维护的Java应用至关重要。
200 0
|
6月前
|
JSON Java 数据库连接

热门文章

最新文章