簡體   English   中英

Jackson 和 LocalDateTime:刪除尾隨零

[英]Jackson and LocalDateTime: Trailing zeros are removed

我在我的 Spring 引導項目中使用 Jackson 生成器 JSON。在我的 Java class 中,我使用private LocalDateTime timestamp; Jackson 將其轉換為 JSON。當時間戳包含例如: 2022-04-26T05:59:54:124530 JSON Object 將收到2022-04-26T05:59:54:12453

這會導致我的接收系統出現錯誤,無法使用此日期格式。 不幸的是,我無法更改接收系統。

有沒有辦法讓 Jackson 告訴我不要刪除末尾的零?

LocaleDateTime class 沒有 static 字符串格式。 它包括幾個選項:

  • uuuu-MM-dd'T'HH:mm
  • uuuu-MM-dd'T'HH:mm:ss
  • uuuu-MM-dd'T'HH:mm:ss.SSS
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSS
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSS

自定義序列化將幫助您實現 static output。在下面的示例中,我使用了 6 毫秒數字的格式,就像您的情況一樣。

@JsonDeserialize(using = BodyDeserializer.class)
@JsonSerialize(using = BodySerializer.class)
public class Body {

    public static final DATE_FORMAT = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss:SSSSSS");
    
    private LocalDateTime myDate;

    public Body(LocalDateTime myDate) {
        this.myDate = myDate;
    }

    public StrLocalDateTimeing getMyDate() { return myDate; }
}

public class BodyDeserializer extends JsonDeserializer {

    @Override
    public User deserialize(JsonParser jsonParser,
            DeserializationContext deserializationContext) throws IOException {
        ObjectCodec oc = jsonParser.getCodec();
        JsonNode node = oc.readTree(jsonParser);
        String date = node.get("myDate");
        LocalDateTime myDate = LocalDateTime.from(Body.DATE_FORMAT.parse(date))
        return new Body(myDate),
    }
}

public class BodySerializer extends JsonSerializer {

    @Override
    public void serialize(Body body, JsonGenerator jsonGenerator,
            SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeStartObject();
        
        jsonGenerator.writeNumberField("myDate", Body.DATE_FORMAT.format(body.getMyDate()));
        jsonGenerator.writeEndObject();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM