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

如何使用Jackson将指定java.time.Duration字段序列化为毫秒值

解决方案

你只需要给目标字段单独指定自定义序列化器即可,不会影响全局其他Duration类型字段的序列化逻辑:

步骤1:实现Duration转毫秒的自定义序列化器

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
import java.time.Duration;

public class DurationToMillisSerializer extends StdSerializer<Duration> {

    public DurationToMillisSerializer() {
        super(Duration.class);
    }

    @Override
    public void serialize(Duration value, JsonGenerator gen, SerializerProvider provider) throws IOException {
        if (value == null) {
            gen.writeNull();
            return;
        }
        // 直接输出毫秒值的长整型
        gen.writeNumber(value.toMillis());
    }
}

步骤2:在目标字段上添加序列化注解

修改你的SomeEvent类,只在durationOfEvent字段上加@JsonSerialize注解绑定上述序列化器:

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.time.Duration;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SomeEvent {

  @JsonSerialize(using = DurationToMillisSerializer.class)
  private Duration durationOfEvent;
}

验证效果

修改后运行你的测试代码,输出结果就会符合预期:

{"durationOfEvent":500}

注:该方案仅作用于当前加了注解的字段,完全不会影响项目中其他未加该注解的Duration类型字段的序列化逻辑,适配你使用的Jackson 2.12.4版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:18:02