You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

添加jackson-modules-java8依赖后仍找不到Jackson JavaTimeModule(非重复问题)

解决Jackson注册Java8时间模块失败的问题

首先得给你指出来:你添加的jackson-modules-java8其实是个聚合POM,它本身不带实际的类文件,光加这个依赖根本没法让Jackson识别Java8的时间类型,得换具体的子模块才行。

第一步:修正依赖配置

把你当前的依赖替换成专门处理java.time类型的具体模块:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.9.5</version>
</dependency>

这个模块才是真正包含Java8时间类型序列化/反序列化逻辑的包。

第二步:正确注册模块

依赖搞定后,注册模块有两种方式可选:

  • 显式手动注册:
ObjectMapper mapper = new ObjectMapper();
// 注册Java8时间模块
mapper.registerModule(new JavaTimeModule());
// 可选:禁用默认的时间戳格式,改用ISO标准格式输出
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
  • 自动注册(Jackson 2.9及以上版本支持):
    只要依赖正确,Jackson会自动扫描类路径下的模块,所以你甚至可以不用手动注册,直接创建ObjectMapper就能用:
ObjectMapper mapper = new ObjectMapper();
// 此时JavaTimeModule已经被自动加载完成

额外提醒

  • 一定要保证Jackson核心库(jackson-databind)的版本和jackson-datatype-jsr310的版本一致,不然容易出现版本冲突导致的奇怪问题。
  • 如果是Spring项目,你完全不用手动注册模块,Spring会帮你自动配置好对应的ObjectMapper

内容的提问来源于stack exchange,提问作者Alex R

火山引擎 最新活动