Весенняя пользовательская валидация аннотации + реализация валидатора
У меня есть простой POJO, который считается допустимым, если один из 2 атрибутов (ssn / clientId) заполнен. Я написал пользовательский весенний валидатор, чтобы сделать проверку.
Вопрос, который у меня есть, есть ли способ, которым я могу аннотировать мое POJO так, чтобы мой пользовательский валидатор вызывался для проверки автоматически? Я пытаюсь избежать ручного вызова его из нескольких мест.
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;
}
}
}
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. }
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"); }
Посмотрите этот валидатор gist.java https://gist.github.com/cmsandiga/cb7ab4d537ef4d4691f7