日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Cloud【Finchley】-07Feign构造多参数GET/POST请求

發布時間:2025/3/21 javascript 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Cloud【Finchley】-07Feign构造多参数GET/POST请求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • 調用順序
  • Feign構造多參數GET請求
    • url參數和方法參數一一對應
    • map接收
  • Feign構造多參數POST請求
  • 源碼

概述

Spring Cloud-06服務消費者整合Feign中將消費者和Feign整合在了一起,示例中Feign客戶端接口中的參數只有1個,如下

實際開發中,多個請求非常常見,如果請求參數有多個呢? 我們使用Feign該如何調用請求呢?


調用順序

當瀏覽器或者外部其他請求請求到MovieController,MovieController需要調用UserController服務提供者提供的服務,MovieController會通過接口UserFeignClient來實現調用。 在UserFeignClient接口方法里,通過映射UserController的REST API實現調用對端服務。

服務端對外提供的rest風格的請求如下


Feign構造多參數GET請求

我們知道Spring Cloud為Feign添加了Spring MVC的注解支持,那按照Spring MVC那種寫法試試?

MovieController中定義一個接受外部請求的方法,映射/movie/getA的請求

@RestController @Slf4j public class MovieController {@Autowiredprivate UserFeignClient userClient;@GetMapping("/movie/getA")public User findUser(User user) {log.info("get進入服務消費者 MovieController.findUser");return userClient.finUser(user);} }

在Feign接口中,定義finUser方法,和服務端UserController暴露的url一致

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

可以看到 value = “/get” ,和服務提供者的請求url保持一致,這樣就能可以調用到該服務。

那試下吧

  • 啟動microservice-discovery-eureka微服務,Eureka Server
  • 啟動micorservice-provider-user,服務提供者
  • 啟動micorservice-consumer-movie-fegin,服務消費者
  • 訪問 http://localhost:7901/movie/getA?username=%E5%B0%8F%E5%B7%A5%E5%8C%A0&age=10

    傳遞了2個參數,都是User類的兩個屬性,按照Spring MVC的邏輯,肯定是可以自動轉換的,但這里報錯了

    盡管我們指定了GET方法,Feign依然會使用POST方法發送請求。

    那該如何寫呢?

    url參數和方法參數一一對應

    URL有幾個參數,Feign接口中的方法就有幾個參數。使用@RequestParam注解指定請求的參數是什么

    MovieController層

    Feign接口

    /*** * @param username* @param age* @return* @desc get的url中有幾個參數,Feign接口的方法中就定義幾個參數,使用@RequestParam注解指定請求的參數是什么* 必須要加上@RequestParam注解,否則啟動報錯。* */@RequestMapping(method = RequestMethod.GET, value = "/get")public User finUser(@RequestParam("username") String username ,@RequestParam("age") Integer age);

    服務提供者保持不變。

  • 啟動microservice-discovery-eureka微服務,Eureka Server
  • 啟動micorservice-provider-user,服務提供者
  • 啟動micorservice-consumer-movie-fegin,服務消費者
  • 訪問 http://localhost:7901/movie/getB?username=%E5%B0%8F%E5%B7%A5%E5%8C%A0&age=10


    map接收

    多參數的URL也可使用Map來構建。當目標URL參數非常多的時候,可使用這種方式簡化Feign接口的編寫。

    MovieController增加個新的方法便于測試

    @GetMapping("/movie/getC")public User findUser3(User user) {log.info("get2進入服務消費者 MovieController.findUser3");Map<String, Object> map = new HashMap<String, Object>() {{put("username",user.getUsername());put("age",user.getAge());}};return userClient.finUser(map);}

    Feign接口

    /*** * @param map* @return* @desc 使用map來接收get請求的多個參數,@RequestParam不可少*/@RequestMapping(method = RequestMethod.GET, value = "/get")public User finUser(@RequestParam Map<String, Object> map);

    服務提供者保持不變。

  • 啟動microservice-discovery-eureka微服務,Eureka Server
  • 啟動micorservice-provider-user,服務提供者
  • 啟動micorservice-consumer-movie-fegin,服務消費者
  • http://localhost:7901/movie/getC?username=%E5%B0%8F%E5%B7%A5%E5%8C%A0xxxx&age=9999


    Feign構造多參數POST請求

    如何使用Feign構造包含多個參數的POST請求 ?

    假設服務提供者的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); }

    用POSTMAN模擬下即可 ,注意Body是JSON格式

    實際工作中的使用


    源碼

    https://github.com/yangshangwei/SpringCloudMaster

    總結

    以上是生活随笔為你收集整理的Spring Cloud【Finchley】-07Feign构造多参数GET/POST请求的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。