Jackson和本地日期时间:删除尾随零

nxagd54h  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(90)

我在Sping Boot 项目中使用Jackson生成JSON。在Java类中,我使用private LocalDateTime timestamp; Jackson将其转换为JSON。例如,当时间戳包含以下内容时:2022-04-26T05:59:54:124530 JSON对象将接收2022-04-26T05:59:54:12453
这导致我的接收系统出现错误,无法使用这种日期格式。不幸的是,我无法更改接收系统。
有没有办法让Jackson告诉我不要去掉结尾的零?

sd2nnvve

sd2nnvve1#

LocaleDateTime类没有静态字符串格式。它包括几个选项:

  • 时-分-日
  • 时:分:秒
  • 时:分:秒
  • 时:分:秒
  • 时:分:秒

自定义序列化将帮助您实现静态输出。在下面的例子中,我使用了一个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();
    }
}

相关问题