在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML5  Java/ Spring Cloud Gateway filter中獲取request.bo

Spring Cloud Gateway filter中獲取request.body

問(wèn)題描述

在自建Filter中如何獲取完整的request.body信息?

問(wèn)題出現(xiàn)的環(huán)境背景及自己嘗試過(guò)哪些方法

在學(xué)習(xí)Spring Cloud Gateway自己寫filter時(shí),嘗試通過(guò)exchange.getRequest().getBody獲得請(qǐng)求消息體,但是出現(xiàn)無(wú)法獲得完整消息體內(nèi)容的問(wèn)題,想請(qǐng)各位大神幫忙看看問(wèn)題出在哪?應(yīng)該如何調(diào)整?非常感謝。

相關(guān)代碼

// 請(qǐng)把代碼文本粘貼到下方(請(qǐng)勿用圖片代替代碼)

@Component
public class PreGatewayFilterFactory extends AbstractGatewayFilterFactory<Object> {


    @Override
    public GatewayFilter apply(Object config) {
        // grab configuration from Config object
        return (exchange, chain) -> {
            //If you want to build a "pre" filter you need to manipulate the
            //request before calling change.filter

            //嘗試1,直接通過(guò)操作Flux打印body內(nèi)容,但是打印結(jié)果不完整,只有部分消息報(bào)文
            ServerHttpRequest request = exchange.getRequest();
            Flux<DataBuffer> dataFlux = request.getBody();

            StringBuffer buffer = new StringBuffer();

            dataFlux.log().flatMap(dataBuffer -> {
                System.out.println("Thread - " + Thread.currentThread().getName() + ": readable count is  " +  dataBuffer.readableByteCount());
                byte[] bytes = new byte[dataBuffer.readableByteCount()];
                dataBuffer.read(bytes);
                DataBufferUtils.release(dataBuffer);
                return Mono.just(bytes);
            }).subscribe(s -> System.out.println(new String(s)));

             //嘗試2,使用DefaultServerRequest封裝后,通過(guò)BodyExtractors轉(zhuǎn)換Mono<String>后打印,但是依然打印結(jié)果只有部分消息報(bào)文
            /*DefaultServerRequest request = new DefaultServerRequest(exchange);
            request.body(BodyExtractors.toMono(String.class)).log().subscribe(System.out::print);*/

            //use builder to manipulate the request
            ServerHttpResponse response = exchange.getResponse();
            return response.writeWith(Mono.empty());
        };
    }
}

你期待的結(jié)果是什么?實(shí)際看到的錯(cuò)誤信息又是什么?

請(qǐng)大家?guī)兔纯次姨幚磉^(guò)程中問(wèn)題出在了哪?應(yīng)該如何修正?非常感謝!

回答
編輯回答
陪妳哭

遇到同樣的問(wèn)題,目前也沒(méi)有思路,不過(guò)昨天取到了post的body參數(shù),今天代碼沒(méi)有改動(dòng)就取不到了。請(qǐng)求也是完全一樣的。

2018年3月31日 03:33