我在Sping Boot 项目中使用Jackson生成JSON。在Java类中,我使用private LocalDateTime timestamp; Jackson将其转换为JSON。例如,当时间戳包含以下内容时:2022-04-26T05:59:54:124530 JSON对象将接收2022-04-26T05:59:54:12453这导致我的接收系统出现错误,无法使用这种日期格式。不幸的是,我无法更改接收系统。有没有办法让Jackson告诉我不要去掉结尾的零?
private LocalDateTime timestamp;
2022-04-26T05:59:54:124530
2022-04-26T05:59:54:12453
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(); } }
1条答案
按热度按时间sd2nnvve1#
LocaleDateTime类没有静态字符串格式。它包括几个选项:
自定义序列化将帮助您实现静态输出。在下面的例子中,我使用了一个6毫秒数字的格式,就像您的情况一样。