验证Bean,异常消息

时间:2016-06-08 13:22:15

标签: groovy bean-validation

我开始使用bean验证,我有以下代码来进行bean验证:

 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 

  }

我想在异常错误的错误消息中添加正在验证的bean的名称类,如下所示:

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

有什么想法吗?提前致谢

1 个答案:

答案 0 :(得分:0)

目前无法将根bean类插入约束违例异常。通过EL,只有经过验证的值和约束参数可用。您需要编写自己的自定义MessageInterpolator。另请参阅Hibernate Validator online docs中有关消息插值的章节。

如果你想将bean类放入一个新的异常,就像你似乎暗示你的 RuntimeException 一样,你只需要调用ConstraintViolation.getRootBeanClass()来访问bean类。 / p>