亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用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 關注
  • 2530 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號