gpt4 book ai didi

java - 在 Spring 中使用验证将 ZonedDateTime 字段限制为毫秒时间的 3 位数字

转载 作者:行者123 更新时间:2023-12-02 10:09:33 26 4
gpt4 key购买 nike

我想在 Spring MVC 请求中验证一个输入 DTO,特别是 ZonedDateTime 字段最多应包含 3 位毫秒级别的数字,即它不能是完整的纳秒精度。除此之外,输入请求应遵循 ISO 日期时间格式。我可以将该字段设为字符串,然后用正则表达式限制它,但我更喜欢将其保留为 ZonedDateTime,这样我就不需要再次解析它。

该对象看起来像这样:

@Data
public class MeasurementDTO {

private ZonedDateTime date;
@Digits(integer = 20, fraction = 8) private BigDecimal value;

}

这是一个嵌套的 DTO,其中父对象作为带有 @Valid 注释的 @RequestBody 出现。

我尝试过 @JsonFormat 但我似乎无法限制毫秒部分。有什么方法可以做到这一点,还是我应该自己将其解析为字符串,然后处理它?或者甚至只是将其保留在 ZonedDateTime,然后检查纳秒组件以查看它是否存在于自定义 validator 中?

多亏了 Tim 的回答,我记得 Java Date 无论如何都不比毫秒更精确,所以我更新了问题以使用 ZonedDateTime ,它的精度高达纳秒精度。我确实希望能够在用户尝试传递更高的精度时向他们发出警告,如果使用日期,此信息就会被吞没。

最佳答案

您可能不认为这是一个完整的答案,但 java.util.Date 只存储最多毫秒的精度,而不是超出该精度。请参阅乔恩·斯基特的 answer here ,或阅读source code for CalendarDate ,这表明它除了毫秒级存储之外什么也没有。

因此,通过 Hibernate 验证将 Date 限制为毫秒精度是没有意义的,因为类型本身已经带有此限制。

关于java - 在 Spring 中使用验证将 ZonedDateTime 字段限制为毫秒时间的 3 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55102015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com