Ste*_*ers 3 java annotations hibernate hibernate-validator bean-validation
我正在使用JSR-303验证(hibernate-validator)来实现具有一些不同规则的实体.宁愿不@Constraint为这些注释堆叠多个注释,而是使用单个注释,例如@MyEntityConstraint.
问题是每种类型的验证失败确实需要有不同的消息,但消息似乎与注释密不可分:
public @interface MyEntityConstraint {
String message() default "A single, unchangeable message per constraint???";
// ...
}
Run Code Online (Sandbox Code Playgroud)
有什么方法围绕这个或我注定要:
@MyEntityConstraint1
@MyEntityConstraint2
// ...
@MyEntityConstraintn
@Entity
public class MyEntity {
// ...
}
Run Code Online (Sandbox Code Playgroud)
正如Hardy所建议的那样,使用ConstraintValidatorContext可以做到这一点- 如下所示:
@Override
public boolean isValid(MyEntity myEntity, ConstraintValidatorContext context) {
// Disable default ConstraintViolation so a customised message can be set instead.
context.disableDefaultConstraintViolation();
return checkConstraint1(myEntity, context)
&& checkConstraint2(myEntity, context)
//...
&& checkConstraintn(myEntity, context);
}
// Note: A private method for each constraint decreases the cyclomatic complexity.
private boolean checkConstraint1(MyEntity myEntity, ConstraintValidatorContext context) {
// Default validity is true until proven otherwise.
boolean valid = true;
if (/*<<Insert constraint #1 conditions (about myEntity) here>>*/) {
valid = false;
context.buildConstraintViolationWithTemplate(
"<<Insert constraint #1 failure message here>>").addConstraintViolation();
}
return valid;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4388 次 |
| 最近记录: |