我有一个简单的POJO,如果填充了2个属性(ssn / clientId)中的一个,则认为它是有效的。我编写了一个自定义的Spring Validator来进行验证。
我的问题是,有没有办法可以注释我的POJO,以便自动调用我的自定义Validator进行验证?我试图避免从多个地方手动调用它。
public class QueryCriteria {
@NotNull
private QueryBy queryBy;
private String ssn;
private String clientId;
}
public class QueryCriteriaValidator implements org.springframework.validation.Validator {
@Override
public boolean supports(Class<?> clazz) {
return QueryCriteria.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
QueryCriteria criteria = (QueryCriteria) target;
switch (criteria.getQueryBy()){
case CLIENT:
//validation logic
break;
case SSN:
//validation logic
break;
default:
break;
}
}
}
答案 0 :(得分:2)
使用Spring MVC,只需将自定义验证器添加到控制器的数据绑定器中:
@Autowired
private QueryCriteriaValidator validator;
@InitBinder
public void initializeBinder(WebDataBinder binder) {
binder.addValidators(validator);
}
否则,您将要注入自定义验证器并自行调用。
@Autowired
private QueryCriteriaValidator validator;
public void process(QueryCriteria criteria) {
check(validator.validate(criteria));
// Continue processing.
}
答案 1 :(得分:0)
Só您可以创建自己的验证。示例:
@RequiredParam
@RegexpValidation("^[\\p{IsLatin}]{2}[\\p{IsLatin}-]* [\\p{IsLatin}]{2}[\\p{IsLatin}- ]*$")
private String name;
创建类验证器e发送要验证的表单:
Map<String, String> invalidFieldMap = Validator.validate(form);
if (invalidFieldMap.size() > 0)
{
LOGGER.warn("Invalid parameters");
}
看看这个要点Validator.java https://gist.github.com/cmsandiga/cb7ab4d537ef4d4691f7