Ложное срабатывание PastOrPresent валидатора

Добрый день.

image

У сущности есть поле , хранящее дату.
В качестве Java типа я пробовал Date и LocalDate.

Время от времени наблюдаю сбой валидатора на форме.
Он то дает вводить текущую дату, то не дает. (на скриншоте поле подсвечено красным - ругается, что дата не может быть больше текущей)
image

Из особенностей - приложение запущенно на Ubuntu
image
При подключении вижу корректную дату.

Есть ли предположение с чем может быть связано?
Что стоит попробовать?

PS.
На Windows машине разработчика проблем не наблюдается.
Классика жанра - “У меня все работает” :slight_smile:

Добрый день

Cпасибо за ваш вопрос.

Проблема

Это связано с тем, как работают syscall convention на Windows и Linux(Unix). Например, выражение

var localDateTimeNow = LocalDateTime.now();
var localDateTimeNowTwo = LocalDateTime.now();
assert localDateTimeNow != localDateTimeNowTwo
  • В случае Windows мы получим отрицательный ответ
  • В случае Unix - положительный

Потому, когда пишутся тесты для проверки времени всегда фиксируют delta времени, которое должно снять эффект “не real-time” эффекта ОС.

Получается у вас и другого разработчика на Windows падает валидация на уровне Present

Решение:

  • Как вариант вы можете переопределить BeanValidator внутри конекста Spring, чтобы решит свою проблема
  • Другой способ - использовать валидацию Past

С уважением, команда Jmix.

Большое спасибо за глубокий анализ проблемы.

Всегда пожалуйста, если нужен еще более детальный ответ, такой же вопрос был на англоязычном форуме

Там я более детально описал как эту проблему.
С уважением, команда Jmix

1 симпатия