I have a simple POJO which is considered valid if one of the 2 attributes (ssn / clientId) is populated. I have written a custom Spring Validator to do the validation.
The question I have is, is there a way I can annotate my POJO so that my custom Validator is invoked for validation automatically? I'm trying to avoid manually invoking it from multiple places.
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;
}
}
}
With Spring MVC, just add the custom validator to your controller's data binder:
@Autowired
private QueryCriteriaValidator validator;
@InitBinder
public void initializeBinder(WebDataBinder binder) {
binder.addValidators(validator);
}
Otherwise, you'll want to inject the custom validator and call it yourself.
@Autowired
private QueryCriteriaValidator validator;
public void process(QueryCriteria criteria) {
check(validator.validate(criteria));
// Continue processing.
}