跳到主要内容
版本:5.0.1

CacheRequestBody GatewayFilter 工厂

DeepSeek V3 中英对照 CacheRequestBody GatewayFilter Factory CacheRequestBody GatewayFilter Factory

某些情况下需要读取请求体。由于请求只能读取一次,我们需要缓存请求体。您可以使用 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();
}
spring:
cloud:
gateway:
routes:
- id: cache_request_body_route
uri: lb://downstream
predicates:
- Path=/downstream/**
filters:
- name: CacheRequestBody
args:
bodyClass: java.lang.String

CacheRequestBody 会提取请求体并将其转换为一个 body 类(例如 java.lang.String,如前面示例中所定义)。然后,CacheRequestBody 将其放入 ServerWebExchange.getAttributes() 可用的属性中,其键值由 ServerWebExchangeUtils.CACHED_REQUEST_BODY_ATTR 定义。

备注

此过滤器仅适用于 HTTP(包括 HTTPS)请求。