Feign之間調用的參數傳遞問題(@RequestBody 和@RequestParam)


Feign調用接口時,都是需要進行參數傳遞的,一般可以分為兩類

  1. 字符串參數傳遞,比如xml、json、string等
  2. 對象參數傳遞

字符串參數傳遞(@RequestParam)

@RequestParam注解用來接收字符串類型參數,有以下注意點

  1. 客戶端@RequestParam注解的value屬性必須指定值,不能為空,且要和服務端接口參數名保持一致
  2. 如果需要傳遞多個字符串參數,則使用多個@RequestParam注解與服務端接口參數保持一一對應即可

服務端

@ResponseBody
@PostMapping(value = "check")
public CheckAckVo check(String jsonParam) {
    FileCheckVo fileCheckVo = JacksonUtil.jsonToBean(jsonParam, FileCheckVo.class);
    
    return checkAck(taskId, OpStatusEnum.SUCCESS.getCode());
}

 

客戶端

@FeignClient(value = "act-engine-web", fallbackFactory = PlatformUserFeignServiceFallBack.class)
public interface PlatformUserFeignService {

    @RequestMapping(value = "/engine/check", method = RequestMethod.POST)
    String check(@RequestParam(value = "jsonParam") String jsonParam);
}

 

對象參數傳遞(@RequestBody )

@RequestBody注解用來接收字符串類型參數,有以下注意點

  1. @RequestBody 注解在服務端和客戶端都需要使用
  2. 參數名和參數類型在服務端和客戶端需要保持一致

服務端

@ResponseBody
@PostMapping(value = "check")
public CheckAckVo check(@RequestBody FileCheckVo fileCheckVo) {

    //使用對象參數傳遞,則不需要再使用jackson進行轉化
    //FileCheckVo fileCheckVo = JacksonUtil.jsonToBean(jsonParam, FileCheckVo.class);
    
    return checkAck(taskId, OpStatusEnum.SUCCESS.getCode());
}

 

客戶端

@FeignClient(value = "act-engine-web", fallbackFactory = PlatformUserFeignServiceFallBack.class)
public interface PlatformUserFeignService {

    @RequestMapping(value = "/engine/check", method = RequestMethod.POST)
    String check(@RequestBody FileCheckVo fileCheckVo);
}

 

思考

  1. @RequestBody 進行對象參數傳遞時,需要引入參數類型依賴(FileCheckVo),此時最好是將這個依賴放入公共依賴包中,否則會增加服務端和客戶端的耦合度。
  2. 個人感覺@RequestBody 更多的用於系統間進行文件傳遞等(將文件讀為byte數組,和其他屬性組裝成一個對象進行傳遞)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM