LocalTime 截断尾随 00 值

问题描述 投票:0回答:3

存储在我的cassandra DB中的原始时间值是:11:43:00.000000000

我试图在我的 JSON 响应中获取它:11:43:00

我得到的是:11:43

到目前为止,我在模型课上尝试过的内容:

import java.time.LocalTime;
@Getter @Setter @RequiredArgsConstructor @AllArgsConstructor
public class Test {
...
@JsonFormat(pattern="HH:mm:ss")
private LocalTime delgtexpytm;

@JsonFormat(pattern="KK:mm:ss")
private LocalTime delgtexpytm;

但他们都在修剪尾随的 00.

java json spring java-time localtime
3个回答
0
投票

未经测试

尝试将

shape
属性覆盖为
STRING
以指定要使用的 JSON 类型。我想只要 JavaDoc 对
shape
:

的以下解释,它就会有所帮助

用于序列化的结构:映射的定义取决于数据类型,但通常有直接对应的数据格式(JSON)。

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

0
投票

更改@JsonFormat 注释中的格式模式以包括像这样的毫秒:

@JsonFormat(pattern="HH:mm:ss.SSS")
private LocalTime delgtexpytm;

0
投票

为了解决这个问题,您可以创建一个自定义序列化程序,将 LocalTime 对象格式化为所需的格式,包括尾随零。

使用 Jackson 库的 LocalTime 序列化器

import java.io.IOException;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

public class LocalTimeSerializer extends JsonSerializer<LocalTime> {
private final DateTimeFormatter formatter = 
DateTimeFormatter.ofPattern("HH:mm:ss.SSSSSSSSS");

@Override
public void serialize(LocalTime value, JsonGenerator gen,  
SerializerProvider serializers) throws IOException {
    gen.writeString(value.format(formatter));
  }
}

然后,您可以通过使用 @JsonSerialize 注释 delgtexpytm 字段来使用此自定义序列化程序:

import com.fasterxml.jackson.databind.annotation.JsonSerialize;

@JsonSerialize(using = LocalTimeSerializer.class)
private LocalTime delgtexpytm;

使用此设置,只要将 LocalTime 对象序列化为 JSON,就会使用 LocalTimeSerializer 将它们转换为字符串。序列化器中使用的格式化程序包括尾随零,因此生成的字符串将具有所需的格式。

© www.soinside.com 2019 - 2024. All rights reserved.