您的位置:首页 > 编程语言 > Java开发

Spring Cloud Gateway -- 获取RequestBody(解决RequestBody不完整的问题)

2019-06-24 14:48 2791 查看

Spring Cloud Gateway -- 获取RequestBody(解决RequestBody不完整的问题)

前言

之前在修改RequestBody和Header这篇文章中有个对于获取RequestBody的猜想,现在在使用过程中发现了这个问题(RequestBody不完整的问题)

获取RequestBody

之前是通过这个方法来获取RequestBody,现在发现请求参数一多就会出现参数获取不完整的情况。

private String resolveBodyFromRequest(ServerHttpRequest serverHttpRequest) throws UnsupportedEncodingException {
//获取请求体
Flux<DataBuffer> body = serverHttpRequest.getBody();
StringBuilder sb = new StringBuilder();
body.subscribe(buffer -> {
byte[] bytes = new byte[buffer.readableByteCount()];
buffer.read(bytes);
DataBufferUtils.release(buffer);
String bodyString = new String(bytes, StandardCharsets.UTF_8);
sb.append(bodyString);
});
//System.out.println(sb.toString());
return URLDecoder.decode(sb.toString(),"utf-8");
}

解决办法

修改路由

.route("route1",
r -> r.method(HttpMethod.POST)
.and().readBody(String.class, requestBody -> {
// 这里不对body做判断处理
return true;
}).and().path(SERVICE1)
.filters(f -> {
f.filters(list);
return f;
}).uri(URI));

修改获取RequestBody方法

exchange.getAttribute("cachedRequestBodyObject")

说明

这种解决方法,不会带来requestbody取不全问题。在低版本的Spring Cloud Finchley.SR2也可以运行。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐