我有一个简单的dto,我想作为json接收,并使用jackson的 ObjectMapper
```
class SimpleDto {
LocalDate date;
}
问题是这个日期的格式应该是 `yyyy-MM-dd` ,不是固定的,它可能会丢失某些部分-例如,它可能是完整日期
{
"date": "2020-01-01"
}
或者只是一年一个月没有一天
{
"date": "2020-01"
}
甚至仅仅一年
{
"date": "2020"
}
我试着用 `ObjectMapper` 与 `JavaTimeModule` 已注册,但不支持例如没有月份和日期格式的年份
ObjectMapper mapper = new ObjectMapper().registerModule(JavaTimeModule());
有没有可能把它Map到 `LocalDate` ? 我看到一些类似的主题(像这样),但似乎他们没有回答我的问题
编辑
现在我开始思考,我应该把这个领域当作 `LocalDate` -据我所知 `LocalDate.of(2000, 0, 0)` (实际上是抛出异常)然后反序列化 `1990` 去(什么?) `1990-01-01` 显然是一个错误,可能会导致逻辑中的一些异常 `01` 是有效且提供的月份和 `01` 是一个有效和规定的日期
3条答案
按热度按时间pgx2nnw81#
您可以创建具有
DateTimeFormatter
使用DateTimeFormatterBuilder#parseDefaulting
.输出:
模式,
u[-M[-d]]
在方括号内有可选字段。nbnkbykc2#
扩展localdatedeserializer,然后使用@jsonserialize(using=yourlocaldateserializer.class)怎么样
vsmadaxz3#
一
LocalDate
只能保存有效日期。我从您的编辑中了解到,您不希望日期为2020年1月1日,以防您的json输入中只出现了2020年。您可以围绕以下代码构建一个自定义反序列化程序,但它有一些缺点。但是,你不知道结果的确切类型是不现实的。如果解析的值包含一个月或一个月的某一天,那么这些值来自输入。为了演示:
输出为: