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.filter.BeforeFilterFunctions.uri;
import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;

class SimpleGateway {
    @Bean
    public RouterFunction<ServerResponse> getRoute() {
        return route().GET("/get", http())
            .before(uri("https://example.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.filter.BeforeFilterFunctions.uri;
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())
            .before(uri("https://example.org"))
            .build();
    }
}

ゲートウェイ MVC ハンドラー関数

さまざまな RouterFunctions.Builder メソッドには HandlerFunction<ServerResponse> が必要です。MVC ゲートウェイによってプロキシされるルートを作成するために、org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions で HandlerFunction 実装が提供されます。最も基本的なのは http() HandlerFunction です。関数は org.springframework.cloud.gateway.server.mvc.common.MvcUtils.GATEWAY_REQUEST_URL_ATTR リクエスト属性で URI を探します。これにより、負荷分散などの動的ターゲットで URI を設定できます。

バージョン 4.1.7 以降、HandlerFunctions.http(String) および HandlerFunctions.http(URI) は非推奨になりました。代わりに、HandlerFunctions.http() を BeforeFilterFunctions.uri() フィルターと組み合わせて使用してください。これにより、ルート URL リクエスト属性の処理における不整合が修正されます。