一、前言
最近项目中用到SpringCloud Gateway进行网关的开发,我使用的版本是:SpringBoot的2.2.11.RELEASE+SpringCloud的Hoxton.SR9,在自定义过滤器时需要获取ServerHttpRequest中body的数据,发现一直获取不到,经过一番查找和调试,终于解决了这个问题,以下是常见问题和完整解决方案。
二、问题
1、目前局部过滤器获取post方法的body有两种(get获取参数此处不做赘述)
(1)、
Flux<DataBuffer> body = exchange.getRequest().getBody();
body.subscribe(buffer -> {
byte[] bytes = new byte[buffer.readableByteCount()];
buffer.read(bytes);
DataBufferUtils.release(buffer);
try {
String bodyString = new String(bytes, "utf-8");
System.out.println(bodyString);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
});
(2)、
AtomicReference<String> bodyRef = new AtomicReference<>();
body.subscribe(buffer -> {
CharBuffer charBuffer = StandardCharsets.UTF_8.decode(buffer.asByteBuffer());
DataBufferUtils.release(buffer);
bodyRef.set(charBuffer.toString());
});
//获取request body