Jackson将日期-时间字符串反序列化为long?



JSON中的日期时间字符串如下:

"dateRange": {
"before": "2021-07-15T23:00:00.000Z",
"after": "2021-07-31T22:59:00.000Z"
}

我正在使用Jackson,并且正在编写我的DTO:

class MyClass {
private DateRange dateRange;
class DateRange {
private Long before;
private Long after;
}
}

我想知道什么是最好的方法来让杰克逊反序列化上述字符串毫秒(长)?例如,如果我是手工编码,它将是Instant.parse(dateRange.before).toEpochMilli()

注意beforeafter字段在JSON中都是可选的,任何一个都可以缺席,所以考虑将它们建模为Long而不是long,这样我就可以检查null。例如:

"dateRange": {}
"dateRange": {
"before": "2021-07-15T23:00:00.000Z"
}
"dateRange": {
"after": "2021-07-15T23:00:00.000Z"
}
// No dateRange prop is also allowed

我在这里看了一下:https://www.baeldung.com/jackson-serialize-dates,但是有很多选择,所以我不确定哪个是最好的?

更新:这似乎工作OK:

class MyClass {
private DateRange dateRange;
class DateRange {
private Date before;
private Date after;
}
}
MyClass myClass = ...
myClass.getDateRange().getBefore().getTime();

您可以使用@JsonFormat或添加日期格式化程序到对象映射器。这完全取决于您的用例。两者都是不错的选择。如果这是应用程序中需要类似转换的孤立用例,则可以使用@JsonFormat。但如果它是整个应用程序的标准,我可能会建议在Objectmapper上设置格式化器,以避免在所有类上编写注释。

最新更新