Доступ к заголовкам в любое время при реализации org.springframework.validation.Validator - PullRequest
0 голосов
/ 08 мая 2020

У меня есть приложение Spring Boot, в котором мне нужно выполнить некоторую проверку полей запроса на основе значения заголовка.

Итак, как и в любом другом приложении Spring Boot, моя точка входа в моем контроллере отдыха выглядит как

public ResponseEntity<Mono<MyResponse>> myOperation(MyRequest request, String another_parameter)

Моя проблема здесь в том, что для выполнения моих проверок я думал об использовании org.springframework.validation.Validator

Всякий раз, когда вы хотите реализовать вышеуказанный интерфейс, вы должны сделать что-то вроде:

public class WebsiteUserValidator implements Validator {

    @Override
    public boolean supports(Class<?> clazz) {
        return MyRequest.class.equals(clazz);
    }

    @Override
    public void validate(Object obj, Errors errors) {
        MyRequest user = (MyRequest) obj;
        if (checkInputString(MyRequest.getSomeField())) {
            errors.rejectValue("someField", "someField.empty");
        }
    }

    private boolean checkInputString(String input) {
        return (input == null || input.trim().length() == 0);
    }
}

Я хотел бы получить заголовки в реализациях метода validate.

Как этого добиться? (получить заголовки можно так сказать в любой момент).

1 Ответ

0 голосов
/ 09 мая 2020

Думаю, лучше использовать javax.validation.ConstraintValidator<A extends Annotation, T>. например, Annotation

@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy ={SexConstraintValidator.class} )
public @interface Sex {
    //default error message
    String message() default "default error message";
    //groups
    Class<?>[] groups() default {};
    //payload
    Class<? extends Payload>[] payload() default {};
}

SexConstraintValidator

public class SexConstraintValidator implements ConstraintValidator<Sex,String> {

    @Override
    public void initialize(Sex constraintAnnotation) {

    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        boolean isValid =doSomeValided();
        return isValid;
    }

}

проверить объект

public class ValidateObject {

    @Sex(message="error message")
    private String sex;

    // ...
}

метод проверки

import org.springframework.validation.annotation.Validated;
public ResponseEntity<Mono<MyResponse>> myOperation(@Validated ValidateObject request, String another_parameter)

или проверить руководство, например это

ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
Set<ConstraintViolation<ValidateObject>> validate=validatorFactory.getValidator().validate(validateObject);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...