Feign接口方法返回值設置

                         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、總結

項目不同,需求不同,兩種方式沒有誰對誰錯之分,依據自己項目需求進行選擇。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章