Как получить интерполированное сообщение ValidationException из Hibernate Validator - PullRequest
1 голос
/ 17 ноября 2011

Запуск ex.getMessage() дает мне:

    Property 'firstname' threw exception; nested exception is javax.validation.ValidationException:
 Error validating field firstname of class com.inferoquest.entity.Employee:
 [ConstraintViolationImpl{interpolatedMessage='Name cannot be shorter than 2 characters',
 propertyPath=firstname, rootBeanClass=class com.inferoquest.entity.Employee,
 messageTemplate='Name cannot be shorter than 2 characters'}]

, из которого я хотел бы извлечь Name cannot be shorter than 2 characters.Обновление: Может быть, я должен также добавить, что я хотел бы сделать это чисто, а не с помощью регулярных выражений: -)

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

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 19 ноября 2011

A ConstraintViolationException упаковывает набор ConstraintViolations (см. JavaDoc для более подробной информации).Вы можете получить эти нарушения, вызвав getConstraintViolations() для перехваченного исключения, выполнить итерацию по набору и создать сообщение со всеми сообщениями о содержащихся нарушениях.

0 голосов
/ 12 августа 2017

Реализация вышеуказанного решения.

@RestControllerAdvice(basePackageClasses = RepositoryRestExceptionHandler.class)
public class GlobalExceptionHandler {

  @ExceptionHandler(ConstraintViolationException.class)
  public ResponseObject handleConstaintViolatoinException(final ConstraintViolationException ex) {

    StringBuilder message = new StringBuilder();
    Set<ConstraintViolation<?>> violations = ex.getConstraintViolations();
    for (ConstraintViolation<?> violation : violations) {
      message.append(violation.getMessage().concat(";"));
    }
    return new ResponseObject(HttpStatus.PRECONDITION_FAILED.value(), message.toString());
  }
}
...