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

LocalTime序列化保留末尾00问题:Cassandra时间JSON输出异常

问题:LocalTime序列化时丢失秒数部分

Cassandra数据库中存储的原始时间值为11:43:00.000000000,期望JSON响应中格式为11:43:00,但实际得到11:43。已尝试在模型类中使用@JsonFormat(pattern="HH:mm:ss")和@JsonFormat(pattern="KK:mm:ss")配置LocalTime字段,但都会截断末尾的:00。

解决方案

1. 升级Jackson版本

旧版Jackson对LocalTime的@JsonFormat支持存在缺陷,无法强制保留秒数部分。建议升级到**Jackson 2.12+**版本,新版本修复了该问题,配置@JsonFormat(pattern="HH:mm:ss")即可正常输出完整格式。

2. 自定义序列化器(无法升级版本时)

如果无法升级Jackson,可通过自定义序列化器强制格式化输出:

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class LocalTimeFullSerializer extends JsonSerializer<LocalTime> {
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");

    @Override
    public void serialize(LocalTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        if (value != null) {
            gen.writeString(FORMATTER.format(value));
        } else {
            gen.writeNull();
        }
    }
}

在字段上绑定该序列化器:

import java.time.LocalTime;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@Getter @Setter @RequiredArgsConstructor @AllArgsConstructor
public class Test {
    // ...
    @JsonSerialize(using = LocalTimeFullSerializer.class)
    private LocalTime delgtexpytm;
}

3. 配置@JsonFormat的shape属性

在@JsonFormat注解中添加shape = JsonFormat.Shape.STRING,明确指定序列化为字符串类型,避免Jackson自动优化格式:

@JsonFormat(pattern = "HH:mm:ss", shape = JsonFormat.Shape.STRING)
private LocalTime delgtexpytm;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:07:14