解決feignClient調(diào)用時(shí)獲取返回對(duì)象類(lèi)型匹配的問(wèn)題
feignClient調(diào)用時(shí)獲取返回對(duì)象類(lèi)型匹配
feignClient是springCloud體系中重要的一個(gè)組件,用于微服務(wù)之間的相互調(diào)用,底層為httpClient,在之前的應(yīng)用中,我一直以為A服務(wù)提供的方法返回類(lèi)型為對(duì)象的話(huà),那么調(diào)用A服務(wù)的B服務(wù)必須也用字段類(lèi)型以及命名完全相同的對(duì)象來(lái)接收,為此我驗(yàn)證了一下,發(fā)現(xiàn)不是必須用完全相同的對(duì)象來(lái)接收,比如,可以用map<String,Object>或者Object來(lái)接收,然后解析。
當(dāng)然,復(fù)雜對(duì)象我還是推薦用一個(gè)完全相同的對(duì)象來(lái)接收。
下面是我的例子:
feignClient是springCloud體系中重要的一個(gè)組件,用于微服務(wù)之間的相互調(diào)用,底層為httpClient,在之前的應(yīng)用中,我一直以為A服務(wù)提供的方法返回類(lèi)型為對(duì)象的話(huà),那么調(diào)用A服務(wù)的B服務(wù)必須也用字段類(lèi)型以及命名完全相同的對(duì)象來(lái)接收,為此我驗(yàn)證了一下,發(fā)現(xiàn)不是必須用完全相同的對(duì)象來(lái)接收,比如,可以用map<String,Object>或者Object來(lái)接收,然后解析。
當(dāng)然,復(fù)雜對(duì)象我還是推薦用一個(gè)完全相同的對(duì)象來(lái)接收。
下面是我的例子:
項(xiàng)目一:首先創(chuàng)建一個(gè)服務(wù)注冊(cè)中心eureka
配置文件
項(xiàng)目二:緊接著創(chuàng)建一個(gè)服務(wù)提供方eureka-client,方法helloWorld返回值為map
注冊(cè)到eureka中
項(xiàng)目三:創(chuàng)建服務(wù)調(diào)用方service-feign
注意:map的key與Hello類(lèi)字段屬性對(duì)應(yīng)
注冊(cè)到eureka
最后:?jiǎn)?dòng)三個(gè)項(xiàng)目
發(fā)現(xiàn)項(xiàng)目二 項(xiàng)目三已經(jīng)被注冊(cè)到服務(wù)中心
調(diào)用項(xiàng)目三的接口
可以正常返回,由于項(xiàng)目二返回類(lèi)型是map.而項(xiàng)目三是用對(duì)象Hello來(lái)接收的,那么就說(shuō)明了服務(wù)提供方的返回值類(lèi)型和調(diào)用方接收值類(lèi)型并不是需要完全對(duì)應(yīng)的。
feignClient傳參(參數(shù)為對(duì)象類(lèi)型)的一個(gè)坑
客戶(hù)端
@RequestMapping(value = "/friendCircleComment/comment",method = RequestMethod.POST) R comment(@RequestBody FriendCircleComment friendCircleComment);
服務(wù)端
@RequestMapping(value = "/comment") public R comment(@RequestBody FriendCircleComment friendCircleComment){ friendCircleCommentService.comment(friendCircleComment); return new R(); }
這么傳參是沒(méi)問(wèn)題的,服務(wù)端也能接收到
但是,問(wèn)題來(lái)了,
小程序的post請(qǐng)求的header必須為
header:{ 'content-type':'application/x-www-form-urlencoded' },
導(dǎo)致后臺(tái)為@RequestBody接收不到參數(shù),
feignClient默認(rèn)參數(shù)請(qǐng)求類(lèi)型是
header:{ 'content-type':'application/json' },
定義@RequestBody接收參數(shù)的headers類(lèi)型必須為
header:{ 'content-type':'application/json' },
所以這樣就有沖突,feignClient和定義為'content-type':'application/x-www-form-urlencoded'的請(qǐng)求接口不能共用
解決方法
不使用對(duì)象接收,使用基本類(lèi)型接收
如下
客戶(hù)端
@RequestMapping(value = "/friendCircleComment/comment",method = RequestMethod.POST) R comment(@RequestParam(value = "friendCircleId",required = false)Integer friendCircleId, @RequestParam(value = "memberId",required = false)Integer memberId, @RequestParam(value = "parentId",required = false)Integer parentId, @RequestParam(value = "comment",required = false)String comment, @RequestParam(value = "replyMemberId",required = false)Integer replyMemberId);
服務(wù)端
@RequestMapping(value = "/comment") public R comment(@RequestParam(value = "friendCircleId",required = false)Integer friendCircleId, @RequestParam(value = "memberId",required = false)Integer memberId, @RequestParam(value = "parentId",required = false)Integer parentId, @RequestParam(value = "comment",required = false)String comment, @RequestParam(value = "replyMemberId",required = false)Integer replyMemberId ){ FriendCircleComment friendCircleComment = new FriendCircleComment(); friendCircleComment.setFriendCircleId(friendCircleId); friendCircleComment.setMemberId(memberId); friendCircleComment.setParentId(parentId); friendCircleComment.setComment(comment); friendCircleComment.setReplyMemberId(replyMemberId); friendCircleCommentService.comment(friendCircleComment); return new R(); }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java學(xué)習(xí)筆記之eclipse+tomcat 配置
俗話(huà)說(shuō):工欲善其事必先利其器,既然要學(xué)習(xí)java,首先把java的開(kāi)發(fā)環(huán)境搗鼓一下吧,這里我們來(lái)談?wù)別clipse+tomcat的配置方法。2014-11-11Spring Boot利用Thymeleaf發(fā)送Email的方法教程
spring Boot默認(rèn)就是使用thymeleaf模板引擎的,下面這篇文章主要給大家介紹了關(guān)于在Spring Boot中利用Thymeleaf發(fā)送Email的方法教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-08-08spring?cloud?eureka注冊(cè)原理-注冊(cè)失敗填坑筆記
這篇文章主要介紹了spring?cloud?eureka注冊(cè)原理-注冊(cè)失敗填坑筆記,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05使用Java構(gòu)造和解析Json數(shù)據(jù)的兩種方法(詳解二)
這篇文章主要介紹了使用Java構(gòu)造和解析Json數(shù)據(jù)的兩種方法(詳解二)的相關(guān)資料,需要的朋友可以參考下2016-03-03Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(20)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07RestTemplate響應(yīng)中如何獲取輸入流InputStream
這篇文章主要介紹了RestTemplate響應(yīng)中如何獲取輸入流InputStream問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01java8快速實(shí)現(xiàn)List轉(zhuǎn)map 、分組、過(guò)濾等操作
這篇文章主要介紹了java8快速實(shí)現(xiàn)List轉(zhuǎn)map 、分組、過(guò)濾等操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Java 策略模式與模板方法模式相關(guān)總結(jié)
這篇文章主要介紹了Java 策略模式與模板方法模式相關(guān)總結(jié),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2021-01-01