溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud怎么使用feign時的復雜參數傳遞

發布時間:2021-07-09 11:03:45 來源:億速云 閱讀:643 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關SpringCloud怎么使用feign時的復雜參數傳遞的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

Feign傳參注意

最近在用SpringCloud嘗試重構以前的項目,使用Feign客戶端組件來調用微服務,經常出現參數傳不過去變成null的問題,網上查了一下發現feign在參數上的使用還是有一定的限制的,主要是要注意:

1. 當參數比較復雜時,feign即使聲明為get請求也會強行使用post請求

2. 不支持@GetMapping類似注解聲明請求,需使用

@RequestMapping(value = "url",method = RequestMethod.GET)

3. 使用@RequestParam注解時必須要在后面加上參數名

寫了一個簡單案例,同時傳輸一個對象和一個字符串作為請求參數,主要關注參數的聲明,其余比如eureka和feign的依賴和配置和后續使用相關的知識請另行查閱。僅供參考

服務端(生產者)

準備:

1. 已經配置將服務注冊在eureka,服務名為“item-service”

2. service層和dao層已經實現好了

邏輯:ItemController接收參數,調用service層,service中為商品Item對象添加詳情desc,然后調用dao保存Item對象,返回Result結果封裝對象

@RestController
public class ItemController { 
    @Autowired
    private ItemService itemService;
 
    /**
     * 添加
     * @param item
     * @param desc
     * @return
     */
    @RequestMapping("/item/save")
    public Result addItem(@RequestBody Item item, @RequestParam("desc") String desc){
        return itemService.addItem(item, desc);
    }
}

客戶端(消費者)

準備: 已經配置注冊到eureka

邏輯:

聲明ItemFeignClient調用eureka上名為"item-service"的服務,返回Result對象

使用Post請求,傳遞兩個參數:

1. TbItem對象,使用@RequestBody來聲明

2. String字符串,使用@RequestParam("xxx")來聲明

@FeignClient("item-service")
public interface ItemFeignClient {
 
    /**
     * 添加
     * @param item
     * @param desc
     * @return
     */
    @RequestMapping(value = "/item/save",method = RequestMethod.POST)
    Result addItem(@RequestBody TbItem item, @RequestParam("desc") String desc);

SpringCloud feign參數傳遞問題記錄

對象傳遞 @RequestBody(required = false)

不支持多對象傳遞,至少我目前發現是這樣的,如有錯誤或者改進的方法請提出

API層

@FeignClient(value = "transaction-feign")
    public interface TransactionApiService {
        /**
         * 交易流水查詢 可分頁
         *
         * @param param
         * @param pageNum
         * @param pageSize
         * @return
         */
        @RequestMapping(value = "/dealflow/list", method = RequestMethod.POST)
        JsonResultDO dealFlowList(@RequestBody(required = false) DealFlowDo param
                , @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum
                , @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize);
    }

接口層

/**
 * 交易流水查詢 可分頁
 * @return JsonResultDO
 */
@RequestMapping(value = "/dealflow/list", method = RequestMethod.POST)
public Page<DealFlowDo> dealFlowList(@RequestBody(required = false) DealFlowDo param
        , @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum
        , @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize
        , @RequestParam(value = "userId") Long userId){
    JsonResultDO resultDO = new JsonResultDO();
    Page<DealFlowDo> page = (Page<DealFlowDo> )dealFlowService.queryDealFlowList(userId, param, pageNum, pageSize);
    return page;
}

單個或多個參數傳遞 @RequestParam/@PathVariable/***

   /**
     * 根據商戶號獲取商戶信息
     *
     * @param merNo
     * @return
     */
    @RequestMapping(value = "/merchant/{merNo}", method = RequestMethod.GET)
    String getMerchantByMerNo(@PathVariable("merNo") String merNo);

感謝各位的閱讀!關于“SpringCloud怎么使用feign時的復雜參數傳遞”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女