Sping Framework
webflux - RequestPredicate(interface)
kkoon9
2022. 2. 1. 21:03
현재 진행중인 사이드 프로젝트에서 사용하는 WebFlux를 분석하면서 정리한 글입니다.
RequestPredicate은 함수형 인터페이스이므로 람다식 또는 메서드 레퍼런스의 할당 대상으로 사용할 수 있습니다.
package org.springframework.web.reactive.function.server;
import java.util.Optional;
@FunctionalInterface
public interface RequestPredicate {
boolean test(ServerRequest request);
default RequestPredicate and(RequestPredicate other) {
return new RequestPredicates.AndRequestPredicate(this, other);
}
default RequestPredicate negate() {
return new RequestPredicates.NegateRequestPredicate(this);
}
default RequestPredicate or(RequestPredicate other) {
return new RequestPredicates.OrRequestPredicate(this, other);
}
default Optional<ServerRequest> nest(ServerRequest request) {
return (test(request) ? Optional.of(request) : Optional.empty());
}
default void accept(RequestPredicates.Visitor visitor) {
visitor.unknown(this);
}
}
boolean test(ServerRequest request);
request에서 받은 predicate를 평가하는 메서드
and, or, negate
request에서 받은 predicate를 평가할 때 도와주는 메서드
- and : 파라미터로 받은 other에 대한 평가를 and 조건으로 처리합니다.
- or : 파라미터로 받은 other에 대한 평가를 or 조건으로 처리합니다.
- negate : 기존 predicate와 not 조건으로 처리합니다.
default Optional<ServerRequest> nest(ServerRequest request)
지정된 request을 중첩 경로에 사용되는 request으로 변환합니다.
예를 들어, path-based predicate는 일치 후에도 경로가 남아 있는 ServerRequest를 반환할 수 있습니다.
default void accept(RequestPredicates.Visitor visitor)
주어진 Visitor을 받아들입니다.
composed RequestPredicate 구현체는 이 RequestPredicates를 구성하는 모든 컴포넌트에 대한 호출을 할 것으로 예상됩니다.
RequestPredicates.Visitor
RequestPredicates의 논리 구조에서 알림을 수신합니다.
- method, queryParam, header, contentType, 논리 구조(and, or 등)와 같은 request에 해당하는 메서드가 존재합니다.
RequestPredicates.Visitor (Spring Framework 5.3.15 API)
void header(String name, String value) Receive notification of an HTTP header predicate.
docs.spring.io