1

我的验证有问题。是否可以仅使用一个 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)?

谢谢

再见

4

1 回答 1

0

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

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

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

于 2012-10-19T07:06:24.430 回答