【发布时间】:2021-12-12 13:09:15
【问题描述】:
所以我观察到@FutureOrPresent 也在抱怨当前日期。进一步调试我的代码
public class MyCustomDeserializer extends JsonDeserializer<Instant> {
private DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd-MM-yyyy").withZone(ZoneOffset.UTC);
@Override
public Instant deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
LocalDate date = LocalDate.parse(p.getText(), fmt);
Instant instant = date.atStartOfDay(ZoneId.of("UTC")).toInstant();
return instant;
}
}
调试给了我这个状态:
知道如何解决这个问题吗?如果有帮助,我在亚洲/加尔各答区
如果我在 JSON 文件中以 fromDate 传递当前日期,则会收到此错误:
fromDate Must Be Of Future Or Present
POJO 有这种格式
@JsonDeserialize(using = MyCustomDeserializer.class)
@JsonSerialize(using = MyCustomSerializer.class)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy")
@NotNull(message = "Please provide From Date")
@FutureOrPresent(message = "From Date Must Be Of Future Or Present")
private Instant fromDate;
【问题讨论】:
-
到底是什么问题?
Instant的值是否不等于任何(未知)预期值?你能更详细地描述这个问题吗?如果你在ZoneId.of("Asia/Kolkata"),那你为什么要使用ZoneId.of("UTC")从一个日期开始创建一个Instant? -
@deHaar 对于以
fromDate作为当前日期的有效负载,当前日期存在错误警报。即使是27-10-2021也被验证器抓住了,尽管它是当前日期 -
瞬间就是时间的瞬间。如果你从今天开始,那是过去,而不是未来或现在。
-
确实,您正在检查日期和时间到最小的可计算单位,而不是仅仅检查您明显得到的日期部分。如果您使用今天的日期,
atStartOfDay()将在Instant.now()之前。 -
使用
LocalDate而不是Instant,如果您想比较日期(包括年、年月和月日)会更合适。
标签: java spring-boot datetime jackson