Я использую Spring Boot 1.5.3.RELEASE. Я пытаюсь проверить REST API Spring Boot с помощью org.springframework.validation.Validator. У весеннего валидатора есть несколько подходов к проверке сущностей, поэтому, когда я звоню
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id", "field.required");
Все работает нормально, и запрос завершается с ошибкой проверки, но когда я выполняю другую проверку
if (!StringUtils.isAllLowerCase(request.getId())) {
errors.rejectValue("id", "Id should be lowercase");
}
ничего не происходит, хотя код действительно выполняется и метод rejectValue действительно вызывается, но обработка запроса по каким-то причинам не останавливается.
Итак, вопрос в том, почему проверка не происходит, и, возможно, есть разные способы выполнить проверку через Spring/Spring-Boot. У меня много сложных проверок, поэтому я стараюсь не использовать JSR-303 и создавать множество пользовательских аннотаций.
Проверка запроса
import com.user.model.TenantRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
@Component
public class TenantRequestValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return TenantRequest.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "id", "field.required");
TenantRequest request = (TenantRequest) target;
if (!StringUtils.isAllLowerCase(request.getId())) {
errors.rejectValue("id", "Id should be lowercase");
}
}
}