spring-cloud-gateway - 如何在 Spring Cloud Gateway 过滤器中读取和修改请求正文?谁能帮我
问题描述
我可以在下面的过滤器中读取请求参数。我想更改其中一个参数,我该怎么做?我使用的是spring cloud 2020.0.0版
@Component
public class ReadRequestBodyFilter extends AbstractGatewayFilterFactory<ReadRequestBodyFilter.Config>{
public static class Config {}
public ReadRequestBodyFilter() {
super(Config.class);
}
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
String cachedBodyAttribute = exchange.getAttribute("cachedRequestBodyObject");
System.out.println("cachedBodyAttribute-->"+cachedBodyAttribute);
return chain.filter(exchange);
};
}
}
解决方案
ModifyRequestBodyGatewayFilterFactory 可用于更改请求的正文
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
String cachedBodyAttribute = exchange.getAttribute("cachedRequestBodyObject");
System.out.println("cachedBodyAttribute-->"+cachedBodyAttribute);
// modify requestData
String newRequestData = changeRequestData(requestData);
ModifyRequestBodyGatewayFilterFactory.Config modifyRequestConfig = new ModifyRequestBodyGatewayFilterFactory.Config()
.setContentType(ContentType.APPLICATION_JSON.getMimeType()) // change content type ...
.setRewriteFunction(String.class, String.class, (exchange, originalRequestBody) -> Mono.just(newRequestData))
return new ModifyRequestBodyGatewayFilterFactory().apply(modifyRequestConfig).filter(exchange, chain);
};
}
推荐阅读
- r - 复杂分组条形图
- c++ - 关注 2d 播放器 openGL
- github - Yii2 fork: dev-custom 作为 yiisoft/yii2 存在,但这些被您的约束拒绝
- google-maps - Location/GeoLocator/GeoLocation 没有返回我的纬度和经度
- oracle - oracle 语句中的 TRUSTED/UNTRUSTED 关键字
- javascript - JavaScript 可以实现并行性吗?
- c++ - 将字符串向量移动到另一个字符串向量
- concurrency - 如何在负载运行器场景中计算以下任务的平均用户并发?有人能帮我吗?
- python - 通过加倍和连接来“扁平化”熊猫数据框?
- javascript - .find() 方法:我如何返回一个布尔值而不是我找到的对象?