jsr303仅使用一个自定义验证器验证2个属性

时间:2012-10-17 14:23:27

标签: bean-validation

我的验证有问题。是否可以仅使用一个ConstraintValidator验证bean的两个属性?我有以下内容:

@Component
public class CheckSomeBeanPropertiesValidator implements ConstraintValidator<CheckSomeBeanProperties, SearchFormBean> {

@Autowired
SomeApplicationService applicationService;

public void initialize(CheckSomeBeanProperties checkSomeBeanProperties) {
}

public boolean isValid(SearchFormBean searchFormBean, ConstraintValidatorContext context) {

ReturnSearchBean searchBean = applicationService.findBySearchBean(searchFormBean);

if(searchBean.isNoResults()) return false; // it will return the message No data found

if(searchBean.isTooManyDataReturned()) return false; // it will return too many records found

return true;
}
}
CheckSomeBeanPropertiesValidator中的

我调用服务SomeApplicationService,它返回一些调用findBySearchBean的数据。而不是必须调用多个自定义的ConstraintValidator(以及多个findBySearchBean),是否可以只调用一次服务并检查两个不同的属性?

由于

再见

1 个答案:

答案 0 :(得分:0)

如果要根据验证结果更改错误消息,则应使用 ConstraintValidatorContext 。您可以禁用默认错误消息并构建自己的错误消息。类似的东西:

 constraintContext.disableDefaultConstraintViolation();
 constraintContext.buildConstraintViolationWithTemplate( "{mykey}"  ).addConstraintViolation();

您还可以调整约束违规的属性路径。 ConstraintValidatorContext 提供了一个流畅的API。只需检查Javadocs或使用IDE进行探索: - )