行业资讯 2025年08月6日
0 收藏 0 点赞 929 浏览 1805 个字
摘要 :

文章目录 解决办法,使用jackson-datatype-jsr310 Jackson – Java 8日期/时间类型java.time.LocalDate默认不受支持。尝试使用Jackson将包含Java 8时间API(如Loc……




Jackson – Java 8日期/时间类型java.time.LocalDate默认不受支持。尝试使用Jackson将包含Java 8时间API(如LocalDate)的对象转换为JSON格式的字符串时遇到错误,即:“ Java 8 date/time type `java.time.LocalDate` not supported by default”。

比如如下示例:

import java.math.BigDecimal;
import java.time.LocalDate;

public class Book {

  private Long id;
  private String title;
  private BigDecimal price;
  // Java 8 only
  private LocalDate publishDate;

  //...
}

App.java:

 ObjectMapper om = new ObjectMapper();

  Book book =
          new Book(1L, \"Book A\",
                  BigDecimal.valueOf(9.99),
                  LocalDate.of(2023, 10, 1));

  // 将对象转为 json
  String result = om.writeValueAsString(book);

运行抛出异常如下:

Exception in thread \"main\" com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
  Java 8 date/time type `java.time.LocalDate` not supported by default:
  add Module \"com.fasterxml.jackson.datatype:jackson-datatype-jsr310\" to enable handling
  (through reference chain: com.mkyong.json.model.Book[\"publishDate\"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
......

解决办法,使用jackson-datatype-jsr310

Jackson默认不支持Java 8日期时间APIs;我们需要手动添加依赖项jackson-datatype-jsr310并注册JavaTimeModule()以使Jackson支持Java 8日期时间APIs。

pom.xml:

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
  </dependency>

  <!-- 支持\"Java 8 Dates\" -->
  <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-jsr310</artifactId>
      <version>${jackson.version}</version>
  </dependency>

代码实现:

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

  ObjectMapper om = new ObjectMapper();
  objectMapper.registerModule(new JavaTimeModule());

  // 将对象转为 json
  String result = om.writeValueAsString(book);

或者使用这样的代码实现:

  ObjectMapper om = new ObjectMapper();
  om.findAndRegisterModules();

以上就是Jackson不支持Java 8日期/时间类型LocalDate的解决办法。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9583.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

986
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

463
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

347
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

455
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

515
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

831
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号