Java ルート API
Spring Cloud Gateway サーバー MVC は、ルートを作成するデフォルトの方法として Spring WebMvc.fn RouterFunctions.Builder (Javadoc) を使用します。これは、WebMvc.fn RouterFunction (Javadoc) インスタンスです。
RouterFunctions.Builder
(Javadoc) インスタンスは、RouterFunctions.route() (Javadoc) を呼び出すことによって取得されます。
import static org.springframework.web.servlet.function.RouterFunctions.route;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
class SimpleGateway {
@Bean
public RouterFunction<ServerResponse> getRoute() {
return route().GET("/get", http("https://httpbin.org")).build();
}
}
RouterFunctions.Builder
には、上記の /get
など、パス述語と組み合わせた各 HTTP メソッド (GET、POST など) のメソッドがあります。最後のパラメーターは HandlerFilterFunction
で、この場合は HandlerFunctions.http()
です。追加の RequestPredicate
パラメーター用の各 HTTP メソッドのオーバーロードされたメソッドと、一般的に使用される汎用の route(RequestPredicate, HandlerFunction
) メソッドがあります。
RouterFunctions.Builder のゲートウェイ MVC 実装
一部の高度なフィルターでは、属性をリクエストするためにメタデータを追加する必要があります。これに対応するために、org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions
クラスがあります。次に、GatewayRouterFunctions.route(String routeId) creates a `RouterFunctions.Builder
インスタンスは "before" フィルターを追加して、routeId
をリクエストメタデータとして追加します。
import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;
class SimpleGateway {
@Bean
public RouterFunction<ServerResponse> getRoute() {
return route("simple_route").GET("/get", http("https://httpbin.org")).build();
}
}
ゲートウェイ MVC ハンドラー関数
さまざまな RouterFunctions.Builder
メソッドには HandlerFunction<ServerResponse>
が必要です。MVC ゲートウェイによってプロキシされるルートを作成するために、HandlerFunction
実装が org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions
で提供されます。最も基本的なのは http()
HandlerFunction
です。URI
がパラメーターとして指定された場合、HTTP リクエストを送信するためのダウンストリームターゲットとして URI
が使用されます (上記の例を参照)。パラメーターが渡されない場合、関数は org.springframework.cloud.gateway.server.mvc.common.MvcUtils.GATEWAY_REQUEST_URL_ATTR
リクエスト属性で URI
を探します。これにより、負荷分散などの動的ターゲットで URI
を設定できるようになります。