国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

springcloud gateway中打印請(qǐng)求參數(shù),請(qǐng)求路徑和返回?cái)?shù)據(jù)

這篇具有很好參考價(jià)值的文章主要介紹了springcloud gateway中打印請(qǐng)求參數(shù),請(qǐng)求路徑和返回?cái)?shù)據(jù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

請(qǐng)求參數(shù),返回參數(shù),請(qǐng)求路徑日志打印

在平時(shí)前后端聯(lián)調(diào)過程中,需要查詢?nèi)罩究吹角岸苏?qǐng)求的接口,上送的參數(shù),返回?cái)?shù)據(jù)這樣有利于我們定位問題;話不多說直接上代碼。

打印請(qǐng)求路徑、請(qǐng)求參數(shù)

在gateway模塊中,新建一個(gè)filter的包,然后創(chuàng)建改類,即可在控制臺(tái)和日志文件里面打印出請(qǐng)求參數(shù),只寫了常用的postget請(qǐng)求的方式;

/**
 * @author 
 * @date 2023/2/3 - 10:54
 * @描述 請(qǐng)求參數(shù)日志打印
 */
@Component
@Slf4j
@AllArgsConstructor
public class HttpRequestFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        String method = request.getMethodValue();
        String contentType = request.getHeaders().getFirst("Content-Type");
        String url = JSONObject.toJSONString(request.getURI());
        log.info("網(wǎng)關(guān)請(qǐng)求路徑: "+url);// 請(qǐng)求路徑打印
        if ("POST".equals(method)) {
            return DataBufferUtils.join(exchange.getRequest().getBody())
                    .flatMap(dataBuffer -> {
                        byte[] bytes = new byte[dataBuffer.readableByteCount()];
                        dataBuffer.read(bytes);
                        try {
                            String bodyString = new String(bytes, "utf-8");
                            log.info("請(qǐng)求參數(shù): "+bodyString);//打印請(qǐng)求參數(shù)
                            exchange.getAttributes().put("POST_BODY", bodyString);
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        }
                        DataBufferUtils.release(dataBuffer);
                        Flux<DataBuffer> cachedFlux = Flux.defer(() -> {
                            DataBuffer buffer = exchange.getResponse().bufferFactory()
                                    .wrap(bytes);
                            return Mono.just(buffer);
                        });
                        ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(
                                exchange.getRequest()) {
                            @Override
                            public Flux<DataBuffer> getBody() {
                                return cachedFlux;
                            }
                        };
                        return chain.filter(exchange.mutate().request(mutatedRequest)
                                .build());
                    });
        }else if ("GET".equals(method)) {
            MultiValueMap<String, String> queryParams = request.getQueryParams();
            log.info("請(qǐng)求參數(shù):" + queryParams);
            log.info("****************************************************************************\n");
            return chain.filter(exchange);
        }
        log.info("****************************************************************************\n");
        return chain.filter(exchange);
    }
    @Override
    public int getOrder() {
        return -200;
    }
}

返回參數(shù)打印


/**
 * @author 
 * @date 2023/2/3 - 10:54
 * @描述 返回參數(shù)日志打印
 */

@Component
public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {

    private static final Logger log = LoggerFactory.getLogger(WrapperResponseGlobalFilter.class);

    @Override
    public int getOrder() {
        // -1 is response write filter, must be called before that
        return -2;
    }

    private static Joiner joiner = Joiner.on("");

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpResponse originalResponse = exchange.getResponse();
        DataBufferFactory bufferFactory = originalResponse.bufferFactory();
        ServerHttpResponseDecorator response = new ServerHttpResponseDecorator(originalResponse) {
            @Override
            public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
                if (getStatusCode().equals(HttpStatus.OK) && body instanceof Flux) {
                    // 獲取ContentType,判斷是否返回JSON格式數(shù)據(jù)
                    String originalResponseContentType = exchange.getAttribute(ORIGINAL_RESPONSE_CONTENT_TYPE_ATTR);
                    if (StringUtils.isNotBlank(originalResponseContentType) && originalResponseContentType.contains("application/json")) {
                        Flux<? extends DataBuffer> fluxBody = Flux.from(body);
                        //(返回?cái)?shù)據(jù)內(nèi)如果字符串過大,默認(rèn)會(huì)切割)解決返回體分段傳輸
                        return super.writeWith(fluxBody.buffer().map(dataBuffers -> {
                            List<String> list = Lists.newArrayList();
                            dataBuffers.forEach(dataBuffer -> {
                                try {
                                    byte[] content = new byte[dataBuffer.readableByteCount()];
                                    dataBuffer.read(content);
                                    DataBufferUtils.release(dataBuffer);
                                    list.add(new String(content, "utf-8"));
                                } catch (Exception e) {
                                    log.info("加載Response字節(jié)流異常,失敗原因:{}", Throwables.getStackTraceAsString(e));
                                }
                            });
                            String responseData = joiner.join(list);

                            log.info("返回參數(shù)responseData:"+responseData);
                            //System.out.println("responseData:"+responseData);


                            byte[] uppedContent = new String(responseData.getBytes(), Charset.forName("UTF-8")).getBytes();
                            originalResponse.getHeaders().setContentLength(uppedContent.length);
                            return bufferFactory.wrap(uppedContent);
                        }));
                    }
                }
                return super.writeWith(body);
            }

            @Override
            public Mono<Void> writeAndFlushWith(Publisher<? extends Publisher<? extends DataBuffer>> body) {
                return writeWith(Flux.from(body).flatMapSequential(p -> p));
            }
        };
        return chain.filter(exchange.mutate().response(response).build());
    }


}

結(jié)果演示

圖片:
springcloud gateway中打印請(qǐng)求參數(shù),請(qǐng)求路徑和返回?cái)?shù)據(jù),方便使用文檔,spring cloud,gateway,java

記錄和幫助文章來源地址http://www.zghlxwxcb.cn/news/detail-551198.html

到了這里,關(guān)于springcloud gateway中打印請(qǐng)求參數(shù),請(qǐng)求路徑和返回?cái)?shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringCloud Gateway 網(wǎng)關(guān)請(qǐng)求中body、query、header參數(shù)的獲取和修改

    ??????最近在開發(fā)中要改造一個(gè)普通SpringBoot接口服務(wù)為SpringCloud Gateway網(wǎng)關(guān)服務(wù),并且需要在網(wǎng)關(guān)做驗(yàn)簽,由于我們這個(gè)服務(wù)需要對(duì)外幾個(gè)第三方平臺(tái)提供接口,每家請(qǐng)求的傳參形式都不同,有將簽名信息放請(qǐng)求頭、也有將簽名信息放query參數(shù)、還有直接放body中的,請(qǐng)求頭

    2024年01月23日
    瀏覽(30)
  • uniapp返回上一級(jí)頁面,傳參,上一級(jí)通過參數(shù)重新請(qǐng)求數(shù)據(jù)

    uniapp返回上一級(jí)頁面,傳參,上一級(jí)通過參數(shù)重新請(qǐng)求數(shù)據(jù)

    小程序navigateback傳值_微信小程序 wx.navigateBack() 返回頁面如何傳遞參數(shù) - 文章...-CSDN博客 ? 當(dāng)前頁面 ? 上一級(jí)頁面 ?

    2024年02月19日
    瀏覽(20)
  • SpringCloud Gateway實(shí)現(xiàn)請(qǐng)求解密和響應(yīng)加密

    SpringCloud Gateway實(shí)現(xiàn)請(qǐng)求解密和響應(yīng)加密

    本文環(huán)境使用比較新的 Java 17 和 SpringBoot 3.1.5,對(duì)應(yīng)到Spring的版本是 6.0.13 使用到的三方插件有: lombok gson hutool 本文注重實(shí)現(xiàn)請(qǐng)求的解密和響應(yīng)的加密,加解密使用的是 Hutool 中的工具類,加解密算法目前提供了AES的方式,其余方式也可兼容擴(kuò)展。 完整代碼倉庫:https://gite

    2024年02月06日
    瀏覽(35)
  • SpringCloud Gateway獲取請(qǐng)求響應(yīng)body大小

    SpringCloud Gateway獲取請(qǐng)求響應(yīng)body大小

    本文獲取請(qǐng)求、響應(yīng)body大小方法的前提 : 網(wǎng)關(guān)只做轉(zhuǎn)發(fā)邏輯,不修改請(qǐng)求、相應(yīng)的body內(nèi)容。 SpringCloud Gateway內(nèi)部的機(jī)制類似下圖,HttpServer(也就是NettyServer)接收外部的請(qǐng)求,在Gateway內(nèi)部請(qǐng)求將會(huì)通過HttpClient(Netty實(shí)現(xiàn)的客戶端)發(fā)送給后端應(yīng)用。 本文的body獲取方式,基于

    2024年02月14日
    瀏覽(25)
  • springcloud的gateway之GlobalFilter獲取請(qǐng)求信息及requestBody

    《本文參考地址》 RequestGlobalFilter.java ResponseGlobalFilter.java RequestAndResponseGlobalFilter.java

    2024年02月16日
    瀏覽(21)
  • SpringCloud GateWay通過過濾器GatewayFilter修改請(qǐng)求或響應(yīng)內(nèi)容

    Spring Cloud Gateway在有些場景中需要獲取request body內(nèi)容進(jìn)行參數(shù)校驗(yàn)或參數(shù)修改,我們通過在GatewayFilter中獲取請(qǐng)求內(nèi)容來獲取和修改請(qǐng)求體,下面我們就基于ServerWebExchange來實(shí)現(xiàn): ServerWebExchange命名為服務(wù)網(wǎng)絡(luò)交換器,存放著重要的請(qǐng)求-響應(yīng)屬性、請(qǐng)求實(shí)例和響應(yīng)實(shí)例等等,有

    2024年02月16日
    瀏覽(21)
  • 【SpringCloud Gateway】SpringCloud各微服務(wù)之間用戶登錄信息共享的實(shí)現(xiàn)思路——gateway網(wǎng)關(guān)token校驗(yàn)以及向微服務(wù)發(fā)送請(qǐng)求攜帶token

    ? ? ? ? 最近在學(xué)習(xí)SpringCloud項(xiàng)目時(shí),想到了一些問題,各個(gè)微服務(wù)分別部署在不同的服務(wù)上,由naocs作為注冊(cè)中心實(shí)現(xiàn)負(fù)載均衡,彼此之間通過Feign相互調(diào)用通信,信息同步并不像單體項(xiàng)目那樣方便,傳統(tǒng)單體項(xiàng)目的登錄驗(yàn)證方式似乎在SpringCloud中不能滿足項(xiàng)目的需求。那么

    2024年02月05日
    瀏覽(20)
  • 【Spring MVC學(xué)習(xí)】連接 && 接收請(qǐng)求參數(shù) && 響應(yīng)返回參數(shù)

    【Spring MVC學(xué)習(xí)】連接 && 接收請(qǐng)求參數(shù) && 響應(yīng)返回參數(shù)

    目錄 前言:認(rèn)識(shí)Spring MVC ??1、什么是MVC? 一、建立連接(5個(gè)注解) ??1、@RequestMapping注解:注冊(cè)接?的路由映射(默認(rèn)返回頁面) ??2、@ResponseBody注解:表示返回的是數(shù)據(jù) ???3、組合注解@RestController = @ResponseBody + @Controller ??4、支持Get請(qǐng)求的2種寫法@GetMapping +?@RequestMapp

    2024年02月16日
    瀏覽(30)
  • curl請(qǐng)求常用參數(shù)和返回碼

    curl是一個(gè)用于傳輸數(shù)據(jù)的工具,支持各種協(xié)議,如HTTP、FTP、SMTP等。以下是一些常用的curl請(qǐng)求參數(shù)及其作用: -X, --request:指定HTTP請(qǐng)求方法,常見的有GET、POST、PUT、DELETE等。 -H, --header:設(shè)置HTTP請(qǐng)求頭,用于傳遞額外的請(qǐng)求信息,例如Authorization、Content-Type等。 -d, --data:設(shè)置

    2024年02月05日
    瀏覽(26)
  • 記一次線上bug排查-----SpringCloud Gateway組件 請(qǐng)求頭accept-encoding導(dǎo)致響應(yīng)結(jié)果亂碼

    記一次線上bug排查-----SpringCloud Gateway組件 請(qǐng)求頭accept-encoding導(dǎo)致響應(yīng)結(jié)果亂碼

    ? ? ? ?基于公司的業(yè)務(wù)需求,在SpringCloud Gateway組件的基礎(chǔ)上,寫了一個(gè)轉(zhuǎn)發(fā)服務(wù),測(cè)試開發(fā)階段運(yùn)行正常,并實(shí)現(xiàn)初步使用。但三個(gè)月后,PostMan請(qǐng)求接口,返回異常,經(jīng)排查,從日志中獲取到轉(zhuǎn)發(fā)響應(yīng)的結(jié)果為亂碼: ? ? ?? 跟蹤日志: 轉(zhuǎn)發(fā)到目標(biāo)接口,響應(yīng)結(jié)果已亂碼

    2024年02月04日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包