美文网首页
使用feign不规范引发的bug

使用feign不规范引发的bug

作者: 爱的旋转体 | 来源:发表于2022-11-28 16:52 被阅读0次

问题描述:
springboot项目使用feign调用第三方接口,第三方接口定义为post请求json格式,但是写代码时写成了@GetMapping,如下所示:

@GetMapping("/query")
JSONObject query(@RequestBody JSONObject req);

请求第三方接口是可以请求成功的,但是如果用postman用get方式请求是失败的。后期项目将feign底层http调用改为了okhttp之后该接口调用失败,排查后发现Feign 默认使用 JDK 的 HttpURLConnnection 来处理 HTTP URL 的请求,会将get请求转为post请求。

    private synchronized OutputStream getOutputStream0() throws IOException {
        try {
            if (!this.doOutput) {
                throw new ProtocolException("cannot write to a URLConnection if doOutput=false - call setDoOutput(true)");
            } else {
                if (this.method.equals("GET")) {
                    this.method = "POST";
                }

                if ("TRACE".equals(this.method) && "http".equals(this.url.getProtocol())) {
                    throw new ProtocolException("HTTP method TRACE doesn't support output");
                } else if (this.inputStream != null) {
                    throw new ProtocolException("Cannot write output after reading input.");
                } else {
                    if (!this.checkReuseConnection()) {
                        this.connect();
                    }

                    boolean var1 = false;
                    String var8 = this.requests.findValue("Expect");
                    if ("100-Continue".equalsIgnoreCase(var8) && this.streaming()) {
                        this.http.setIgnoreContinue(false);
                        var1 = true;
                    }

                    if (this.streaming() && this.strOutputStream == null) {
                        this.writeRequests();
                    }

                    if (var1) {
                        this.expect100Continue();
                    }

                    this.ps = (PrintStream)this.http.getOutputStream();
                    if (this.streaming()) {
                        if (this.strOutputStream == null) {
                            if (this.chunkLength != -1) {
                                this.strOutputStream = new HttpURLConnection.StreamingOutputStream(new ChunkedOutputStream(this.ps, this.chunkLength), -1L);
                            } else {
                                long var3 = 0L;
                                if (this.fixedContentLengthLong != -1L) {
                                    var3 = this.fixedContentLengthLong;
                                } else if (this.fixedContentLength != -1) {
                                    var3 = (long)this.fixedContentLength;
                                }

                                this.strOutputStream = new HttpURLConnection.StreamingOutputStream(this.ps, var3);
                            }
                        }

                        return this.strOutputStream;
                    } else {
                        if (this.poster == null) {
                            this.poster = new PosterOutputStream();
                        }

                        return this.poster;
                    }
                }
            }
        } catch (RuntimeException var5) {
            this.disconnectInternal();
            throw var5;
        } catch (ProtocolException var6) {
            int var2 = this.responseCode;
            this.disconnectInternal();
            this.responseCode = var2;
            throw var6;
        } catch (IOException var7) {
            this.disconnectInternal();
            throw var7;
        }
    }

相关文章

  • 使用feign不规范引发的bug

    问题描述:springboot项目使用feign调用第三方接口,第三方接口定义为post请求json格式,但是写代...

  • 点餐项目规范

    规范 使用 spring cloud 体系 拆分服务(商品服务,订单服务) 服务通讯使用 feign 具体服务拆分...

  • 【Spring Cloud Alibaba】Nacos中使用Fe

    《Nacos中使用Feign》 使用方法同在Eureka中使用Feign 使用Feign进行远程调用、实现断路器、...

  • Feign的介绍

    什么是Feign? Feign的使用

  • Fegin使用

    Feign使用 集成 加入Eureka客户端和Feign pom.xml 启用Eureka和Feign 配置 使用...

  • 6、Feign

    一、Feign的概述 二、Feign的使用步骤:

  • 质量保障规范

    在项目中,比bug更可恶的是不规范的流程和不规范的操作。当然,也正是由于这些不规范,给项目埋下风险和问题。如何去规...

  • BUG 规范

    BUG 规范 一、BUG编写规范 ØBUG的summary描述需简明扼要,例如:“上传文档:输入超长字符,系统出黄...

  • 19. SpringCloud之Feign源码解析

    1、前言 Feign的功能和使用方式 可以看这篇 : SpringCloud之Feign使用介绍[https://...

  • Spring Netfix组件介绍(二)

    1. 什么是Feign? 2. 如何集成Feign? 3. Feign在代码上是如何执行的? 4. Feign使用...

网友评论

      本文标题:使用feign不规范引发的bug

      本文链接:https://www.haomeiwen.com/subject/aralfdtx.html