CacheRequestBodyGatewayFilter ファクトリ

状況によっては、リクエスト本文を読み取る必要があります。リクエストは一度しか読み取れないため、リクエストボディをキャッシュする必要があります。CacheRequestBody フィルターを使用して、リクエスト本文をキャッシュしてからダウンストリームに送信し、exchange 属性から本文を取得できます。

次のリストは、リクエスト本文 GatewayFilter をキャッシュする方法を示しています。

@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
    return builder.routes()
        .route("cache_request_body_route", r -> r.path("/downstream/**")
            .filters(f -> f.prefixPath("/httpbin")
        		.cacheRequestBody(String.class).uri(uri))
        .build();
}
application.yml
spring:
  cloud:
    gateway:
      routes:
      - id: cache_request_body_route
        uri: lb://downstream
        predicates:
        - Path=/downstream/**
        filters:
        - name: CacheRequestBody
          args:
            bodyClass: java.lang.String

CacheRequestBody はリクエスト本文を抽出し、本文クラス (前の例で定義された java.lang.String など) に変換します。次に、CacheRequestBody は、ServerWebExchangeUtils.CACHED_REQUEST_BODY_ATTR で定義されたキーを使用して、ServerWebExchange.getAttributes() から使用可能な属性にそれを配置します。

このフィルターは、HTTP (HTTPS を含む) リクエストでのみ機能します。