Feign接口方法返回值設置
一、介紹
隨着微服務的廣泛應用,越來越多的企業都會使用微服務進行項目開發,在各個服務之間需要通過feign來進行通信,所以在feign調用接口中方法會接受其他服務接口不同類型返回值。
二、返回值設置
1、依據被調用服務接口設置相同返回類型
介紹:微服務A接口getUser 返回List<User>類型,微服務B通過feign調用方法也返回相同的結果類型。
特點:返回類型一一對應,在調用時不需要進行轉化直接拿來就可以用。
缺點:擴展性不好,維護性不加。
解釋:在目前springboot開發中,接口一般都會返回json類型數據(也就是使用@restController或者使用@ResponseBody註解修飾),就算是對象或者對象集合也是一樣的,或者其他自己封裝的返回對象。如果有許多不同的返回對象,當這些返回對象在A服務做了修改相應的在B服務的feign接口處也要做修改,相當麻煩且不符合java面向接口編程思想。
2、全部設置爲String
介紹:微服務A接口只要被@restController或者使用@ResponseBody註解修飾我統統在微服務Bfeign接口使用String來進行接受。
特點:通過String來接受返回參數,格式一致。
缺點:後面調用需要轉換。
代碼介紹:
// 微服務A controller 已經使用@restController修飾
@PostMapping(value="/getAllQuestionBank",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public List<QuestionBankDto> getAllQuestionBank(){
return baseinfoQuestionMange.getAllQuestionBank();
}
// 微服務B feign接口 使用String進行接受
@PostMapping(value="/baseinfo/getAllQuestionBank")
String getAllQuestionBank();
// 微服務B 當需要調用feign信息時需要強轉成List<QuestionBankDto>格式
// 調用微服務獲取題庫章節信息,該處強制使用try catch進行包裹
String questionBankInfo = baseInfoApi.getAllQuestionBank();
List<QuestionBankDto> mysqlQuestionBank = objectMapper.readValue(questionBankInfo,new TypeReference<ArrayList<QuestionBankDto>>(){});
只要你導入一下springboot依賴,它默認就給你導入了Jackson jar包
注意事項:使用該方式時需要將ObjectMapper配置到bean容器中。
3、總結
項目不同,需求不同,兩種方式沒有誰對誰錯之分,依據自己項目需求進行選擇。