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

如何让Java 8时间类在Jersey JAX-RS客户端中正常工作?

配置Jersey HTTP客户端支持Java 8时间类型序列化/反序列化

方法1:自定义JacksonJaxbJsonProvider并注册到客户端

创建自定义Jackson JSON提供者,内置配置好JavaTimeModule的ObjectMapper,再将其注册到Jersey客户端:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;

public class CustomJacksonJsonProvider extends JacksonJaxbJsonProvider {
    public CustomJacksonJsonProvider() {
        super();
        ObjectMapper objectMapper = new ObjectMapper();
        // 注册Java 8时间模块
        objectMapper.registerModule(new JavaTimeModule());
        // 可选:关闭默认的时间戳序列化,改用ISO格式字符串
        // objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        setMapper(objectMapper);
    }
}

构建客户端时注册该提供者:

import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.JerseyClient;
import org.glassfish.jersey.client.JerseyClientBuilder;

public class JerseyClientInitializer {
    public static JerseyClient getConfiguredClient() {
        ClientConfig config = new ClientConfig();
        config.register(CustomJacksonJsonProvider.class);
        
        return JerseyClientBuilder.createClient(config);
    }
}

方法2:直接在ClientConfig中绑定自定义ObjectMapper

无需创建自定义提供者,通过AbstractBinder将配置好的ObjectMapper绑定到客户端:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.JerseyClient;
import org.glassfish.jersey.client.JerseyClientBuilder;
import org.glassfish.jersey.internal.inject.AbstractBinder;

public class JerseyClientInitializer {
    public static JerseyClient getConfiguredClient() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule());
        // 可选:自定义时间格式
        // objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

        ClientConfig config = new ClientConfig();
        config.register(JacksonFeature.class);
        // 绑定自定义ObjectMapper
        config.register(new AbstractBinder() {
            @Override
            protected void configure() {
                bind(objectMapper).to(ObjectMapper.class);
            }
        });

        return JerseyClientBuilder.createClient(config);
    }
}

依赖兼容性说明

确保jackson-datatype-jsr310的版本与Jersey依赖的Jackson版本一致,避免版本冲突:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>对应Jackson版本号</version>
</dependency>

内容的提问来源于stack exchange,提问作者Nicholas DiPiazza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:55:09