Java ルート API

Spring Cloud Gateway サーバー MVC は、ルートを作成するデフォルトの方法として Spring WebMvc.fn RouterFunctions.Builder (Javadoc) を使用します。これは、WebMvc.fn RouterFunction (Javadoc) インスタンスです。

RouterFunctions.Builder (Javadoc) インスタンスは、RouterFunctions.route() (Javadoc) を呼び出すことによって取得されます。

GatewaySampleApplication.java
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 をリクエストメタデータとして追加します。

GatewaySampleApplication.java
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 を設定できるようになります。