SpringBoot反序列化json即时到第二天
SpringBoot deserializing json instant to next day
所以我观察了 @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;
}
}
调试给我这个状态:
知道如何解决这个问题吗?如果有帮助,我在 Asia/Kolkate 区域
如果我在 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;
问题是您使用的是一天的开始时间
如果您使用今天的日期,那将永远是过去的日期。
如果您今天使用并想要将来的瞬间,您可以在一天结束时获得瞬间
LocalDateTime localDateTime= date.atTime(23, 59, 59);
localDateTime.atZone( ZoneId.of("UTC"));
localDateTime.toInstant();
这会给你一个最有可能发生在今天但也总是在未来或现在最有可能发生的时刻
您也可以使用未来一分钟的瞬间,而不是一天结束时的瞬间。
当前时间的一个瞬间可能会失败,因为请求到达目的地需要时间,而且最好有一点缓冲
所以我观察了 @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;
}
}
调试给我这个状态:
知道如何解决这个问题吗?如果有帮助,我在 Asia/Kolkate 区域
如果我在 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;
问题是您使用的是一天的开始时间
如果您使用今天的日期,那将永远是过去的日期。 如果您今天使用并想要将来的瞬间,您可以在一天结束时获得瞬间
LocalDateTime localDateTime= date.atTime(23, 59, 59);
localDateTime.atZone( ZoneId.of("UTC"));
localDateTime.toInstant();
这会给你一个最有可能发生在今天但也总是在未来或现在最有可能发生的时刻
您也可以使用未来一分钟的瞬间,而不是一天结束时的瞬间。
当前时间的一个瞬间可能会失败,因为请求到达目的地需要时间,而且最好有一点缓冲