2016-06-08 5 views
1

Я начала работы с проверкой боба, я имею follwing код, чтобы сделать проверку боба:Validation Bean, Exception Сообщение

class Personne { 

    void validate(Class<?>... groupes) { 

      Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); 
      Set<ConstraintViolation<Personne>> violation = validator.validate(this, groupes); 
      if (violation.size() > 0) { 
       Set<String> violationMessages = new HashSet<String>(); 

       for (ConstraintViolation<Personne> violations : violation) { 
        violationMessages.add("Valeur '" + 
          violations.getInvalidValue()+ 
          "' invalid for '"+ 
          violations.getRootBeanClass().getSimpleName()+ 
          "."+violations.getPropertyPath() 
          + "' : "+ 
          violations.getMessage()); 
       } 

       throw new RuntimeException(" class in not valid: \n" + StringUtils.join(violationMessages, "\n")); 
      } 
     } 
} 

И

class Eleve extends Personne 
{ 
    @NotNull 
    String nom 
    @NotNull 
    String prenom 
    } 

class Prof extends Personne 
{ 
    @NotNull 
    String nom 
    @NotNull 
    String prenom 

    } 

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

throw new RuntimeException(getRootBeanClass().getSimpleName() + "is not valid: \n" + StringUtils.join(violationMessages, "\n")); 

Любые идеи? Заранее спасибо

ответ

0

В настоящее время нет способа интерполяции класса корневого компонента в исключение нарушения ограничений. Через EL доступны только проверенное значение и параметры ограничения. Вам нужно будет написать свой собственный код MessageInterpolator. См. Также главу об интерполяции сообщений в валидаторе Hibernate online docs.

Если вы хотите поместить класс компонента в новое исключение, как вы, кажется, подразумевает, с RuntimeException Например, вы можете просто позвонить ConstraintViolation.getRootBeanClass(), чтобы получить доступ к классу бина.