Весенний метод уровня Validator - PullRequest
0 голосов
/ 29 августа 2018

Я хочу подтвердить, если два аргумента getCategories() соответствуют моим ожиданиям. Я создал валидатор:

@Constraint(validatedBy = EnvironmentIdValidator.class)
@Target({METHOD, CONSTRUCTOR})
@Retention(RUNTIME)
@Documented
public @interface IEnvironmentIdValidator {
    String message() default "Invalid environment ID.";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
    String[] value();
}

И реализация:

@SupportedValidationTarget(ValidationTarget.PARAMETERS)
public class EnvironmentIdValidator implements ConstraintValidator<IEnvironmentIdValidator,Object[]> {

    @Override
    public void initialize(IEnvironmentIdValidator constraintAnnotation) {
        // logic

    }

    @Override
    public boolean isValid(Object[] object, ConstraintValidatorContext constraintValidatorContext) {
       // logic
    }
}

Я вызываю этот валидатор на одной из моих конечных точек с аннотацией, одновременно передавая два параметра.

    @IEnvironmentIdValidator(value = {"environmentID", "requestAuthorizationHeader"})
    public ResponseEntity<?> getCategories(@PathVariable(name = "environmentID") Long environmentID,
                                           @RequestHeader("Authorization") String requestAuthorizationHeader) {
//...
}

Но, к сожалению, валидатор не запускается. Что я, возможно, делаю не так?

1 Ответ

0 голосов
/ 14 октября 2018

Ваш контроллер должен иметь аннотацию @Validated, иначе ваш компонент не будет прикреплен к пользовательской проверке.

//...
import org.springframework.validation.annotation.Validated;

@Controller
@Validated
public class MyController {

    @IEnvironmentIdValidator
    @GetMapping("/test/{environmentID}")
    public ResponseEntity<?> getCategories(@PathVariable(name = "environmentID") Long environmentID,
                                      @RequestHeader("Authorization") String requestAuthorizationHeader) {
    //...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...