SpringCloud 如何使用feign時的復雜參數(shù)傳遞
Feign傳參注意
最近在用SpringCloud嘗試重構以前的項目,使用Feign客戶端組件來調(diào)用微服務,經(jīng)常出現(xiàn)參數(shù)傳不過去變成null的問題,網(wǎng)上查了一下發(fā)現(xiàn)feign在參數(shù)上的使用還是有一定的限制的,主要是要注意:
1. 當參數(shù)比較復雜時,feign即使聲明為get請求也會強行使用post請求
2. 不支持@GetMapping類似注解聲明請求,需使用
@RequestMapping(value = "url",method = RequestMethod.GET)
3. 使用@RequestParam注解時必須要在后面加上參數(shù)名
寫了一個簡單案例,同時傳輸一個對象和一個字符串作為請求參數(shù),主要關注參數(shù)的聲明,其余比如eureka和feign的依賴和配置和后續(xù)使用相關的知識請另行查閱。僅供參考
服務端(生產(chǎn)者)
準備:
1. 已經(jīng)配置將服務注冊在eureka,服務名為“item-service”
2. service層和dao層已經(jīng)實現(xiàn)好了
邏輯:ItemController接收參數(shù),調(diào)用service層,service中為商品Item對象添加詳情desc,然后調(diào)用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);
}
}
客戶端(消費者)
準備: 已經(jīng)配置注冊到eureka
邏輯:
聲明ItemFeignClient調(diào)用eureka上名為"item-service"的服務,返回Result對象
使用Post請求,傳遞兩個參數(shù):
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參數(shù)傳遞問題記錄
對象傳遞 @RequestBody(required = false)
不支持多對象傳遞,至少我目前發(fā)現(xiàn)是這樣的,如有錯誤或者改進的方法請?zhí)岢?/p>
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;
}
單個或多個參數(shù)傳遞 @RequestParam/@PathVariable/***
/**
* 根據(jù)商戶號獲取商戶信息
*
* @param merNo
* @return
*/
@RequestMapping(value = "/merchant/{merNo}", method = RequestMethod.GET)
String getMerchantByMerNo(@PathVariable("merNo") String merNo);
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
在已經(jīng)使用mybatis的項目里引入mybatis-plus,結果不能共存的解決
這篇文章主要介紹了在已經(jīng)使用mybatis的項目里引入mybatis-plus,結果不能共存的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
SpringBoot整合SpringSecurity和JWT和Redis實現(xiàn)統(tǒng)一鑒權認證
Spring Security是一個可以為Java應用程序提供全面安全服務的框架,同時它也可以輕松擴展以滿足自定義需求,本文主要介紹了SpringBoot整合SpringSecurity和JWT和Redis實現(xiàn)統(tǒng)一鑒權認證,感興趣的可以了解一下2023-11-11
如何用Springboot Admin監(jiān)控你的微服務應用
這篇文章主要介紹了如何用Springboot Admin監(jiān)控你的微服務應用,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下。2021-01-01
SpringBoot?JavaMailSender發(fā)送郵件功能(實例詳解)
JavaMailSender是Spring提供的,非常好用的,實現(xiàn)郵件發(fā)送的接口 ,這篇文章主要介紹了SpringBoot?JavaMailSender發(fā)送郵件功能,需要的朋友可以參考下2024-03-03

