Spring валидатор для REST API работает только частично

Я использую 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");
    }


}
}

person Aliaksei Stadnik    schedule 30.05.2017    source источник
comment
Покажи свой контроллер.   -  person M. Deinum    schedule 30.05.2017


Ответы (1)


Предоставьте сведения о TenantRequest.java.

Может быть, сейчас вы можете попробовать удалить @Component, так как он не нужен, потому что вы реализуете Validator.

Обратитесь к моему рабочему образцу, созданному https://github.com/Roshanmutha/rcmutha-SpringFormUIValidation/blob/master/src/main/java/com/rcmutha/SpringInputValidation/EmployeeFormValidator.java

Также вы добавили ниже в контроллере?

@InitBinder
protected void initBinder(WebDataBinder binder) {
    binder.setValidator(new EmployeeFormValidator());
}
person RoshanKumar Mutha    schedule 30.05.2017