You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加jackson-datatype-jsr310模块后仍报错:Java 8时间类型不支持

问题解决思路

1. 统一Jackson组件版本

你当前使用的jackson-databind:2.12.3和jackson-datatype-jsr310:2.15.2版本不一致,这会导致模块兼容性问题——Jackson核心模块与扩展模块的版本必须严格匹配才能正常协作。

解决方式:将两个组件版本统一,比如都升级到2.15.2,或者都降级到2.12.3。以Maven为例,在pom.xml中统一管理版本:

<properties>
    <jackson.version>2.15.2</jackson.version>
</properties>

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

2. 确保Spring使用你的自定义ObjectMapper

Spring 3.x中,直接注册ObjectMapper Bean可能不会覆盖默认配置,需要通过以下方式让Spring优先使用你的自定义实例:

方式一:用Jackson2ObjectMapperBuilderCustomizer(推荐,贴合Spring自动配置逻辑)

package org.something.config;

import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.DurationDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.DurationSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.temporal.ChronoUnit;

@Configuration
public class JacksonConfig {

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jacksonCustomizer() {
        return builder -> {
            // 注册JSR310模块
            builder.modules(new JavaTimeModule());
            // 显式配置Duration的序列化/反序列化规则(可根据需求调整格式)
            builder.serializerByType(Duration.class, new DurationSerializer(ChronoUnit.SECONDS));
            builder.deserializerByType(Duration.class, DurationDeserializer.INSTANCE);
        };
    }
}

方式二:给ObjectMapper添加@Primary注解

package org.something.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.DurationDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.DurationSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import java.time.temporal.ChronoUnit;

@Configuration
public class JacksonConfig {

    @Bean
    @Primary
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = JsonMapper.builder()
                .addModule(new JavaTimeModule())
                // 显式配置Duration的序列化器/反序列化器
                .serializerByType(Duration.class, new DurationSerializer(ChronoUnit.SECONDS))
                .deserializerByType(Duration.class, DurationDeserializer.INSTANCE)
                .build();

        return mapper;
    }
}

3. 排查依赖冲突

执行依赖分析命令(Maven:mvn dependency:tree,Gradle:./gradlew dependencies),检查是否有其他依赖引入了不同版本的Jackson组件,若有则通过<exclusions>标签排除冲突版本。


内容的提问来源于stack exchange,提问作者Suvid Sahay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 01:38:21