杰克逊自定义日期格式化程序
Jackson custom date formatter
我想将带有日期字段的 Json 对象序列化为 Pojo。
例如
{
date: <some arbitrary date format>
}
至
@JsonFormat(???)
LocalDateTime dateTime;
问题是日期可以是任意数量的格式。例如,可能只是一年,只是一个日期,或者日期和时间。甚至那些可以有多种格式。
2021
2021-5-23
2021/05/23
2021/05/23 02:07
2021-05-23 02:07:53
2021/05/23 02:07:50.567
我已经编写了一个具有格式列表的解析器,并将遍历它们直到找到一个可用的格式。我如何编写使用该代码的自定义 Jackson 序列化程序或格式化程序,并可以从 Json 对象中获取字符串并将其正确转换为 Pojo 中的 Date 或 LocalDateTime 对象?
如果有影响,我也在 SpringBoot 中这样做
我想,你是在谈论反序列化?如果是这样,您可以创建自己的 JsonDeserializer
that supports LocalDateTime
and register it with JsonComponent
。这看起来像这样:
(可以通过 p.getText()
访问“输入”)
@JsonComponent
public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
String stringValue = p.getText();
// Use your parser instead of this
DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("yyyy[-MM-dd HH:mm:ss]")
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0).toFormatter();
return LocalDateTime.parse(stringValue, formatter);
}
}
我想将带有日期字段的 Json 对象序列化为 Pojo。 例如
{
date: <some arbitrary date format>
}
至
@JsonFormat(???)
LocalDateTime dateTime;
问题是日期可以是任意数量的格式。例如,可能只是一年,只是一个日期,或者日期和时间。甚至那些可以有多种格式。
2021
2021-5-23
2021/05/23
2021/05/23 02:07
2021-05-23 02:07:53
2021/05/23 02:07:50.567
我已经编写了一个具有格式列表的解析器,并将遍历它们直到找到一个可用的格式。我如何编写使用该代码的自定义 Jackson 序列化程序或格式化程序,并可以从 Json 对象中获取字符串并将其正确转换为 Pojo 中的 Date 或 LocalDateTime 对象?
如果有影响,我也在 SpringBoot 中这样做
我想,你是在谈论反序列化?如果是这样,您可以创建自己的 JsonDeserializer
that supports LocalDateTime
and register it with JsonComponent
。这看起来像这样:
(可以通过 p.getText()
访问“输入”)
@JsonComponent
public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
String stringValue = p.getText();
// Use your parser instead of this
DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("yyyy[-MM-dd HH:mm:ss]")
.parseDefaulting(ChronoField.MONTH_OF_YEAR, 1)
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0).toFormatter();
return LocalDateTime.parse(stringValue, formatter);
}
}