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

相关文章
|
5月前
|
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
348 4
复杂项目即时通讯从android 5升级android x后遗症之解决报错#79 java.io.EOFException Unexpected end of ZLIB input stream-优雅草卓伊凡|bigniu
|
4月前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
268 3
|
3月前
|
JSON Java 数据格式
java调用服务报错400
java调用服务报错400
106 6
java调用服务报错400
|
3月前
|
JSON Java 数据格式
java调用服务报错415 Content type ‘application/octet-stream‘ not supported
java调用服务报错415 Content type ‘application/octet-stream‘ not supported
249 6
|
3月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
230 1
|
3月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
245 1
|
6月前
|
存储 安全 Java
深入理解Java序列化接口及其实现机制
记住,序列化不仅仅是把对象状态保存下来那么简单,它涉及到类的版本控制、安全性和性能等多个重要方面。正确理解和实现Java序列化机制对于构建高效、安全和可维护的Java应用至关重要。
226 0
|
7月前
|
JSON Java 数据库连接
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
2880 8
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决