【发布时间】:2017-10-26 15:06:59
【问题描述】:
如果我们定义一个类级别的验证注解,例如一个比较字段并且有一个ConstraintValidator 这样的注解:
public class ComparisonValidator implements ConstraintValidator<ValueMatches, Object>
{
private String[] fields;
@Override
public void initialize(final ValueMatches constraintAnnotation) {
fields = constraintAnnotation.fields();
}
@Override
public boolean isValid(final Object value, final ConstraintValidatorContext context) {
if (fields.length == 0) {
return true;
}
final BeanWrapperImpl beanWrapper = new BeanWrapperImpl(value);
final Object comparisonValue = beanWrapper.getPropertyValue(fields[0]);
for (int i = 1; i < fields.length; i++) {
final Object fieldValue = beanWrapper.getPropertyValue(fields[i]);
if (!comparisonValue.equals(fieldValue)) {
return false;
}
}
return true;
}
}
我们很好地产生了一个全局验证错误,可以通过 Thymeleaf 使用:
${#fields.errors('global')}
现在,我如何识别该错误并理解它是具体的比较错误?我的意思是,毕竟我们会收到有关全局错误的消息,还是我错了?
【问题讨论】:
标签: java spring validation spring-validator