Весенняя пользовательская валидация аннотации + реализация валидатора


У меня есть простой 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 2

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