Правильный способ получения ошибок Bean Validation и отображения соответствующих сообщений пользователю - PullRequest
0 голосов
/ 07 июня 2019

Я работаю в проекте с использованием JPA и Bean Validation.Я хочу показывать пользователю дружественные сообщения о неудачных проверках, и мне нужно показывать эти сообщения на разных языках в зависимости от языкового стандарта пользователей.

Я использую стандартные аннотации, такие как @NotNull, @Size, а также некоторые пользовательские проверки уровня класса.

Я использую следующий код для проверки сущностей перед их сохранением:

        Validator validator = validation.buildDefaultValidatorFactory().getValidator();
        Set<ConstraintViolation<Company>> constraintViolations = validator.validate(company);

        if (constraintViolations.size() > 0) {
            Set<String> violationMessages = new HashSet<String>();

            for (ConstraintViolation<Company> constraintViolation : constraintViolations) {
                violationMessages.add(constraintViolation.getPropertyPath() + ": " + constraintViolation.getMessage());
            }
        }

Если проверка не удалась, я вижу сообщения иполя, которые не прошли проверку, но я не знаю, как преобразовать эти сообщения проверки в дружественные и на разных языках (на основе Locale пользователей).

У меня есть следующие вопросы:

  • Как правильно достичь этого?
  • Я знаю, что JPA автоматически проверяет сущности на предмет проверок перед сохранением.Если я выполняю проверку вручную (с помощью приведенного выше кода), выполняю ли я процесс проверки дважды?
  • Если я использую JSF, которая также выполняет проверки перед обновлением модели, я запускаю процесс проверки три раза (1JSF, 2. приведенный выше код и 3. Wildfly / JPA перед сохранением / слиянием)?
  • Если приведенный выше код выполняется в EJB, как я могу передать ошибки проверки на уровень представления (например, JSF))?
  • Нужно ли возвращать список ConstraintViolations на уровень представления?- Нужно ли создавать исключение для каждой проверки?

Спасибо

...