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
相关产品推荐
相关产品推荐

