Hen*_*nry 6 validation message java-ee bean-validation
我开始使用bean验证,我正在尝试构建约束.我的约束是验证CPF(巴西的个人文件).我的约束是有效的,但我需要消息包含动态参数.
我正在使用ValidationMessages.properties.我的代码:
@Constraint(validatedBy=CpfValidator.class)
@Size(min=11, max=14)
@Documented
@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Cpf {
String message() default "{cpf.validation.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Run Code Online (Sandbox Code Playgroud)
我的ValidationMessages.properties:
cpf.validation.message=Cpf {cpf} é inválido
Run Code Online (Sandbox Code Playgroud)
我的验证器:我正在使用context.buildConstraintViolationWithTemplate来自定义我的消息.
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
String cpf = value;
boolean result = ValidationUtil.validaCpf(cpf);
if (result) {
return true;
}
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("pf.validation.message}")
.addConstraintViolation();
return false;
}
Run Code Online (Sandbox Code Playgroud)
创建消息时,如何通过参数传递验证值(cpf)?
当使用Hibernate Validator> = 4.2时,您可以${validatedValue}在消息中通过验证值(在规范中标准化的Bean Validation 1.1中):
cpf.validation.message=Cpf ${validatedValue} é inválido
Run Code Online (Sandbox Code Playgroud)
顺便说一句。Hibernate Validator已经附带了@CPF约束,您可以在参考指南中找到更多信息。得知您的工作方式非常高兴。
我找到了解决方案,我想我可以改进这个解决方案,但现在它很好.我在代码中做了这些更改:
String message() default "Cpf %s é inválido";
String msgDefault = context.getDefaultConstraintMessageTemplate();
String msgFormatada = String.format(msgDefault, cpf);
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(msgFormatada).addConstraintViolation();
Run Code Online (Sandbox Code Playgroud)
如果我们想为消息提供其他参数而不是验证值:
cpf.validation.message=Cpf {cpf} é inválido
Run Code Online (Sandbox Code Playgroud)
我们可以使用 HibernateConstraintValidatorContext 如下:
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
String cpf = value;
boolean result = ValidationUtil.validaCpf(cpf);
if (result) {
return true;
}
HibernateConstraintValidatorContext hibernateContext = context.unwrap(HibernateConstraintValidatorContext.class);
hibernateContext.disableDefaultConstraintViolation();
hibernateContext
.addMessageParameter( "cpf", cpf )
.buildConstraintViolationWithTemplate("pf.validation.message}")
.addConstraintViolation();
return false;
}
Run Code Online (Sandbox Code Playgroud)
如上所述,在休眠文档中
| 归档时间: |
|
| 查看次数: |
12410 次 |
| 最近记录: |