为了账号安全,请及时绑定邮箱和手机立即绑定

使用Feign用GET方法时RequestBody问题,以及关于HTTP的疑问

使用Feign用GET方法时RequestBody问题,以及关于HTTP的疑问

拉风的咖菲猫 2019-02-25 01:46:20
最近对单体项目进行服务化改造,使用feign作为声明式http接口客户端工具,但在使用GET方式时有些疑问: 客户端代码: @RequestLine("GET /users") public List<User> list(UserDto user); 服务端代码 @RequestMapping(value = "/users", method = RequestMethod.GET) public List<User> list(@RequestBody User user) { return userService.getList(user); } feign分别尝试了Java原生URLConnection,OkHttp,ApacheHttpClient三种方式: 1.URLConnection报405错误,说明http方法不对,但是feign配置是GET方法,查feign的日志也是用的GET方法。后来发现原因是URLConnection在的原因:对于有request body的GET方法,自动改为POST方法了。 2.OkHttp直接报错:method GET must not have a request body. 3.ApacheHttpClient完美支持。 问题来了:从HTTP协议本身,没有要求GET方法一定要用url这样的传参方式,也可以用request body的。 为什么html的form表单默认将Get方法的参数请到url,而不是requety body? 为什么URLConnection将有request body的GET请求转为POST? 为什么OkHttp不支持Get方法有request body? 另外为了rest风格,所有查询接口都是GET的,用ApacheHttpClient也是可以的。目前还没有迭代到生产环境,这样做不知道会不会有问题。 求教各位,谢谢!
查看完整描述

3 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

规范就是这么定义的,没有什么为什么,第三方库只是按照规范的方式去处理

查看完整回答
反对 回复 2019-03-01
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

从语义的角度我们的查询接口都用了GET方法,我们的服务器环境也是支持的。

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 2461 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信