티스토리 뷰

현재 진행중인 사이드 프로젝트에서 사용하는 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에 해당하는 메서드가 존재합니다.

 

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/reactive/function/server/RequestPredicates.Visitor.html

 

RequestPredicates.Visitor (Spring Framework 5.3.15 API)

void header(String name, String value) Receive notification of an HTTP header predicate.

docs.spring.io

 

'Sping Framework' 카테고리의 다른 글

Mono [1]  (0) 2022.02.04
MonoSink  (0) 2022.02.04
[Spring boot] 테스트 코드 작성  (0) 2020.02.14
[Spring boot] Spring boot 환경 설정하기  (0) 2020.02.11
[Spring] 예제로 배우는 스프링 입문 [3] 프로젝트 과제  (0) 2020.01.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함