WebFlux中獲取response body數據

場景

@Component
public class LogRespFilter implements GlobalFilter, Ordered {

 	@Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpResponse originalResponse = exchange.getResponse();
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {
            @Override
            public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
            	//修改header
                HttpHeaders httpHeaders = originalResponse.getHeaders();
                httpHeaders.add("xxxxxx","aaaaaa");
                //輸出返回結果
                if (body instanceof Flux) {
                    Mono<Void> newMono = super.writeWith(
                            DataBufferUtils.join(body)
                                    .doOnNext(dataBuffer -> {
                                        String respBody = dataBuffer.toString(StandardCharsets.UTF_8);
                                        //輸出body
                                        logger.info("fgwResponse : body = {}", respBody);
                                    })
                    );
                    //輸出response,不包含body
                    logger.info("fgwResponse : resp = {}",  JSON.toJSONString(exchange.getResponse()));
                    return newMono;

				}
				return super.writeWith(body);
            }
        };
        return chain.filter(exchange.mutate().response(decoratedResponse).build());
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章