欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Cloud如何使用Feign構(gòu)造多參數(shù)的請求

 更新時(shí)間:2018年03月28日 10:51:38   作者:周立  
這篇文章主要介紹了Spring Cloud如何使用Feign構(gòu)造多參數(shù)的請求,以GET以及POST方法的請求為例進(jìn)行講解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本節(jié)我們來探討如何使用Feign構(gòu)造多參數(shù)的請求。筆者以GET以及POST方法的請求為例進(jìn)行講解,其他方法(例如DELETE、PUT等)的請求原理相通,讀者可自行研究。

GET請求多參數(shù)的URL

假設(shè)我們請求的URL包含多個(gè)參數(shù),例如http://microservice-provider-user/get?id=1&username=張三 ,要如何構(gòu)造呢?

我們知道,Spring Cloud為Feign添加了Spring MVC的注解支持,那么我們不妨按照Spring MVC的寫法嘗試一下:

@FeignClient("microservice-provider-user")
public interface UserFeignClient {
 @RequestMapping(value = "/get", method = RequestMethod.GET)
 public User get0(User user);
}

然而,這種寫法并不正確,控制臺(tái)會(huì)輸出類似如下的異常。

feign.FeignException: status 405 reading UserFeignClient#get0(User); content:
{"timestamp":1482676142940,"status":405,"error":"Method Not Allowed","exception":"org.springframework.web.HttpRequestMethodNotSupportedException","message":"Request method 'POST' not supported","path":"/get"}

由異??芍?,盡管我們指定了GET方法,F(xiàn)eign依然會(huì)使用POST方法發(fā)送請求。

正確寫法如下:

(1) 方法一

@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient {
 @RequestMapping(value = "/get", method = RequestMethod.GET)
 public User get1(@RequestParam("id") Long id, @RequestParam("username") String username);
}

這是最為直觀的方式,URL有幾個(gè)參數(shù),F(xiàn)eign接口中的方法就有幾個(gè)參數(shù)。使用@RequestParam注解指定請求的參數(shù)是什么。

(2) 方法二

多參數(shù)的URL也可使用Map來構(gòu)建。當(dāng)目標(biāo)URL參數(shù)非常多的時(shí)候,可使用這種方式簡化Feign接口的編寫。

@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient {
 @RequestMapping(value = "/get", method = RequestMethod.GET)
 public User get2(@RequestParam Map<String, Object> map);
}

在調(diào)用時(shí),可使用類似以下的代碼。

public User get(String username, String password) {
 HashMap<String, Object> map = Maps.newHashMap();
 map.put("id", "1");
 map.put("username", "張三");
 return this.userFeignClient.get2(map);
}

POST請求包含多個(gè)參數(shù)

下面我們來討論如何使用Feign構(gòu)造包含多個(gè)參數(shù)的POST請求。假設(shè)服務(wù)提供者的Controller是這樣編寫的:

@RestController
public class UserController {
 @PostMapping("/post")
 public User post(@RequestBody User user) {
  ...
 }
}

我們要如何使用Feign去請求呢?答案非常簡單,示例:

@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient {
 @RequestMapping(value = "/post", method = RequestMethod.POST)
 public User post(@RequestBody User user);
}

TIPS

(1) 本節(jié)相關(guān)代碼,詳見本書配套代碼中的microservice-provider-user-multiple-params項(xiàng)目和microservice-consumer-movie-feign-multiple-params項(xiàng)目。

(2) 除本節(jié)講解的方式外,我們也可編寫自己的編碼器來構(gòu)造多參數(shù)的請求,但這種方式編碼成本較高,代碼可重用性較低。故此,本書不再贅述。

拓展閱讀

(1) 希望Feign能夠支持參數(shù)請求使用POJO的Issue:https://github.com/spring-cloud/spring-cloud-netflix/issues/1253
(2) 建議使用Feign原生的注解的Issue:https://github.com/spring-cloud/spring-cloud-netflix/issues/659
(3) 建議增強(qiáng)Feign的功能:https://github.com/spring-cloud/spring-cloud-netflix/issues/1360
(4) 建議支持可選的Request Body(目前Feign當(dāng)POST一個(gè)null時(shí),會(huì)報(bào)異常):https://github.com/spring-cloud/spring-cloud-netflix/issues/1047

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺析Java虛擬機(jī)詳解之概述、對象生存法則

    淺析Java虛擬機(jī)詳解之概述、對象生存法則

    這篇文章主要介紹了Java虛擬機(jī)詳解之概述、對象生存法則,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • SpringCloud?Feign請求頭刪除修改的操作代碼

    SpringCloud?Feign請求頭刪除修改的操作代碼

    這篇文章主要介紹了SpringCloud?Feign請求頭刪除修改,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Java優(yōu)秀類庫Hutool使用示例

    Java優(yōu)秀類庫Hutool使用示例

    Hutool是一個(gè)小而全的Java工具類庫,通過靜態(tài)方法封裝,降低相關(guān)API的學(xué)習(xí)成本,提高工作效率,涵蓋了Java開發(fā)開發(fā)中的方方面面,使用Hutool可節(jié)省開發(fā)人員對項(xiàng)目中公用類和公用工具方法的封裝時(shí)間,使開發(fā)專注于業(yè)務(wù),同時(shí)可以最大限度的避免封裝不完善帶來的bug
    2023-02-02
  • JDBC增刪改查和查唯一的完整代碼解析

    JDBC增刪改查和查唯一的完整代碼解析

    這篇文章主要介紹了JDBC增刪改查和查唯一的完整代碼解析,代碼分為第四部分,每部分代碼都不錯(cuò),對jdbc增刪改查操作感興趣的朋友一起學(xué)習(xí)吧
    2016-12-12
  • Java查找并高亮PDF文本過程解析

    Java查找并高亮PDF文本過程解析

    這篇文章主要介紹了Java查找并高亮PDF文本過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Spring Data JPA 如何使用QueryDsl查詢并分頁

    Spring Data JPA 如何使用QueryDsl查詢并分頁

    這篇文章主要介紹了Spring Data JPA 如何使用QueryDsl查詢并分頁,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java成員變量默認(rèn)值原理詳解

    Java成員變量默認(rèn)值原理詳解

    這篇文章主要介紹了Java成員變量默認(rèn)值原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java實(shí)戰(zhàn)之實(shí)現(xiàn)物流配送系統(tǒng)示例詳解

    Java實(shí)戰(zhàn)之實(shí)現(xiàn)物流配送系統(tǒng)示例詳解

    這篇文章主要介紹了一個(gè)java實(shí)戰(zhàn)項(xiàng)目:通過java、SSM、JSP、mysql和redis實(shí)現(xiàn)一個(gè)物流配送系統(tǒng)。文中的示例代碼非常詳細(xì),需要的朋友可以參考一下
    2021-12-12
  • java讀取csv文件和寫csv示例分享

    java讀取csv文件和寫csv示例分享

    這篇文章主要介紹了JAVA對CSV格式文本數(shù)據(jù)處理后再保存成新CSV格式文本的模板,可以學(xué)習(xí)到j(luò)ava讀取csv文件和寫csv的方法,需要的朋友可以參考下
    2014-03-03
  • 解決Tomcat啟動(dòng)報(bào)異常java.lang.ClassNotFoundException問題

    解決Tomcat啟動(dòng)報(bào)異常java.lang.ClassNotFoundException問題

    這篇文章主要介紹了解決Tomcat啟動(dòng)報(bào)異常java.lang.ClassNotFoundException問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評論