开发者社区> 问答> 正文

GET 强制改成 POST 请求

[深圳-后端-lyning] rt.jar 里面的这个类,居然把 GET 请求 改成 POST 请求,什么情况?spring-cloud-starter-openfeign 依赖 feign-core,feign-core 里面调用了 rt.jar,发请求的时候,把 GET 请求改成 POST,这是啥原理?简单说,(String id) 参数不写任何注解,传进来的数据会被 feign 默认当成 request body,feign.Client 在发起请求之前,先设置为 GET 请求,然后会判断 feign.Request 是否包含 body,如果有的话 就把 GET 请求 修改为 POST 请求,修改请求方法的操作在 rt.jar 包中,这部分代码属于 JDK。

来源:云原生后端社区https://www.yuque.com/server_mind/answer

展开
收起
montos 2020-04-20 17:02:05 2006 0
1 条回答
写回答
取消 提交回答
    • [上海-后端-sion] 正常来说, http get 是不应该带 request body 的吧,需要发送的请求数据都在 url 上, 但是,当你们非要在 get httpurlconnection 上通过 outputstream 上传内容的时候,那我怎么办, GET 强改 POST 了。
    • [上海-后端-sion] https://stackoverflow.com/questions/978061/http-get-with-request-body
    • [上海-后端-sion] RFC 7213 (HTTPbis) states: "A payload within a GET request message has no defined semantics;"
    • [深圳-后端-lyning] spring cloud openfeign 如果声明 @GetMapping 的入参,需要将入参转成 url 参数,再发请求,这样比较合理。GET 请求就算把数据放在 body,也别改为 POST 啊。
    • [上海-后端-sion] 是的, 这个要看 httpurlconnection 作者的选择了, 或者在是 get 的时候被调了 getOutputStream 方法抛出异常。
    • [深圳-后端-lyning] 看了一下源码,发现 feign-core 模块的单元测试没有覆盖这种情况,不然这个错误应该很早就被发现。不确定从技术角度来说合不合理,从我个人的角度来看是这样不合理,甚至可以说是个 BUG。request method 应该按开发人员声明的为准,底层不允许改,不符合标准,提示错误也行 。

    来源:云原生后端社区https://www.yuque.com/server_mind/answer

    2020-04-20 17:04:10
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载