Spring REST - перехватывает параметры из запроса и передает их в валидатор - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь создать валидатор для двух параметров, входящих в адрес конечной точки запроса ниже:

@PutMapping("/{region}/organizations/{organizationId}")
public void updateOrganization(
@PathVariable("region") String region,
@PathVariable("organizationId") Long organizationId)

Увы, интерфейс ConstraintValidator позволяет мне использовать один параметр:

public interface ConstraintValidator<A extends Annotation,T>

Есть ли способ получить оба параметра в классе валидатора, чтобы я мог проверить, находится ли запрошенная организация в заданном регионе, не заставляя интерфейсную сторону передавать объект в мой контроллер, и если да, как я могу это сделать?

Я думал о том, чтобы перехватить параметры, прежде чем передать их в валидатор и создать какой-то пользовательский объект только для проверки. Вместо этого он будет использоваться в классе валидатора, но любой вариант будет хорош, если он работает и достаточно прост.

Класс контроллера:

@Validated
@RestController
@RequiredArgsConstructor
public class OrganizationController  {


     @PutMapping("/{region}/organizations/{organizationId}")
     public void updateOrganization(
     @PathVariable("region") String region,
     @PathVariable("organizationId") Long organizationId) {

        // TODO

    }
}

Аннотация:

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = OrganizationIdValidator.class)
public @interface OrganizationId {

    String message() default "Given organization does not belong to requested region";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}

И валидатор:

public class OrganizationIdValidator implements ConstraintValidator<OrganizationId, SomeObjectToPassHere> {

    @Override
    public boolean isValid(SomeObjectToPassHere value, ConstraintValidatorContext context) {
        //TODO
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...