У меня есть входной DTO в запросе Spring MVC, который я хочу проверить, в частности, поле ZonedDateTime должно содержать не более 3 цифр на уровне миллисекунд, то есть оно не может быть с точностью до наносекунд.Кроме этого, запрос ввода должен соответствовать формату даты и времени ISO.Я мог бы сделать поле строкой, а затем просто ограничить его регулярным выражением, но я предпочитаю сохранять его как ZonedDateTime, поэтому мне не нужно анализировать его снова.
Объект выглядит следующим образом:
@Data
public class MeasurementDTO {
private ZonedDateTime date;
@Digits(integer = 20, fraction = 8) private BigDecimal value;
}
И это вложенный DTO, в котором родительский объект выглядит как @RequestBody
с аннотацией @Valid
.
Я пробовал @JsonFormat, но не могу ограничитьмиллисекундная часть.Есть ли способ сделать это, или я должен просто разобрать это как строку, а затем разобраться с этим?Или даже просто оставить его в ZonedDateTime, а затем проверить наносекундный компонент, чтобы увидеть, есть ли он в пользовательском валидаторе?
Благодаря ответу Тима я вспомнил, что Java Date
в любом случае не имеет большей точности, чем миллис,поэтому я обновил вопрос, чтобы использовать ZonedDateTime
с точностью до наносекунды.Я хочу иметь возможность предупредить пользователя, если он попытается передать больше точности, если при использовании даты эта информация будет просто проглочена.