最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

假設(shè)我們請求的URL包含多個參數(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);
}

然而,這種寫法并不正確,控制臺會輸出類似如下的異常。

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依然會使用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有幾個參數(shù),F(xiàn)eign接口中的方法就有幾個參數(shù)。使用@RequestParam注解指定請求的參數(shù)是什么。

(2) 方法二

多參數(shù)的URL也可使用Map來構(gòu)建。當(dāng)目標(biāo)URL參數(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)用時,可使用類似以下的代碼。

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請求包含多個參數(shù)

下面我們來討論如何使用Feign構(gòu)造包含多個參數(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項目和microservice-consumer-movie-feign-multiple-params項目。

(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一個null時,會報異常):https://github.com/spring-cloud/spring-cloud-netflix/issues/1047

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

相關(guān)文章

  • Springboot vue導(dǎo)出功能實現(xiàn)代碼

    Springboot vue導(dǎo)出功能實現(xiàn)代碼

    這篇文章主要介紹了Springboot vue導(dǎo)出功能實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Java工具類實現(xiàn)高效編寫報表

    Java工具類實現(xiàn)高效編寫報表

    對于報表數(shù)據(jù)大部分情況下使用寫sql的方式為大屏/報表提供數(shù)據(jù)來源,但是對于某些復(fù)雜情況下僅僅使用sql無法實現(xiàn),這篇文章主要介紹了Java工具類實現(xiàn)高效編寫報表
    2022-11-11
  • Springboot安全框架整合SpringSecurity實現(xiàn)方式

    Springboot安全框架整合SpringSecurity實現(xiàn)方式

    這篇文章主要介紹了Spring全家桶中Springboot安全框架整合SpringSecurity的實現(xiàn)方式,有需要的朋友可以借鑒參考下,希望可以有所幫助
    2021-09-09
  • springmvc不進(jìn)入Controller導(dǎo)致404的問題

    springmvc不進(jìn)入Controller導(dǎo)致404的問題

    這篇文章主要介紹了springmvc不進(jìn)入Controller導(dǎo)致404的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java設(shè)計模式中的適配器模式詳解

    Java設(shè)計模式中的適配器模式詳解

    適配器模式(Adapter),是Java23種設(shè)計模式中的結(jié)構(gòu)型模式之一,它可以將新的功能和原先的功能連接起來,使由于需求變動導(dǎo)致不能用的功能,重新利用起來,本文將詳細(xì)聊一聊Java適配器的運用場景和使用方法,感興趣的同學(xué)可以跟著小編一起來學(xué)習(xí)
    2023-05-05
  • java實現(xiàn)文件上傳下載功能

    java實現(xiàn)文件上傳下載功能

    這篇文章主要介紹了java實現(xiàn)文件上傳下載功能,上傳單個或多個文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Maven中的SnapShot版本和正式版本的區(qū)別

    Maven中的SnapShot版本和正式版本的區(qū)別

    在Nexus倉庫中,一個倉庫一般分為public(Release)倉和SNAPSHOT倉,本文詳細(xì)的介紹了SnapShot版本和正式版本的區(qū)別,感興趣的可以了解一下
    2021-06-06
  • Java利用正則表達(dá)式提取數(shù)據(jù)的方法

    Java利用正則表達(dá)式提取數(shù)據(jù)的方法

    最近由于項目需求需要提取txt里的數(shù)據(jù),之前用C#實現(xiàn)過,由于最近學(xué)習(xí)了java,所以嘗試用java實現(xiàn)下,這篇文章主要介紹了Java利用正則表達(dá)式提取數(shù)據(jù)的方法,需要的朋友可以參考下,下面來一起看看吧。
    2016-12-12
  • Java使用PreparedStatement接口及ResultSet結(jié)果集的方法示例

    Java使用PreparedStatement接口及ResultSet結(jié)果集的方法示例

    這篇文章主要介紹了Java使用PreparedStatement接口及ResultSet結(jié)果集的方法,結(jié)合實例形式分析了PreparedStatement接口及ResultSet結(jié)果集的相關(guān)使用方法與操作注意事項,需要的朋友可以參考下
    2018-07-07
  • SpringBoot配置SwaggerUI訪問404錯誤的解決方法

    SpringBoot配置SwaggerUI訪問404錯誤的解決方法

    這篇文章主要為大家詳細(xì)介紹了SpringBoot配置SwaggerUI訪問404錯誤的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評論

上思县| 颍上县| 黄骅市| 和林格尔县| 南漳县| 南华县| 丰镇市| 开封县| 麻城市| 鄂州市| 凤台县| 灌南县| 莱西市| 常宁市| 垦利县| 临漳县| 平定县| 岫岩| 乡宁县| 响水县| 肃北| 津南区| 古浪县| 凯里市| 茶陵县| 沧州市| 康马县| 辉县市| 溧阳市| 临漳县| 余干县| 多伦县| 高要市| 抚松县| 台江县| 长子县| 齐河县| 永清县| 高青县| 潢川县| 竹北市|