解決feignClient調(diào)用時(shí)獲取返回對(duì)象類型匹配的問(wèn)題
feignClient調(diào)用時(shí)獲取返回對(duì)象類型匹配
feignClient是springCloud體系中重要的一個(gè)組件,用于微服務(wù)之間的相互調(diào)用,底層為httpClient,在之前的應(yīng)用中,我一直以為A服務(wù)提供的方法返回類型為對(duì)象的話,那么調(diào)用A服務(wù)的B服務(wù)必須也用字段類型以及命名完全相同的對(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ù)提供的方法返回類型為對(duì)象的話,那么調(diào)用A服務(wù)的B服務(wù)必須也用字段類型以及命名完全相同的對(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類字段屬性對(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)目二返回類型是map.而項(xiàng)目三是用對(duì)象Hello來(lái)接收的,那么就說(shuō)明了服務(wù)提供方的返回值類型和調(diào)用方接收值類型并不是需要完全對(duì)應(yīng)的。
feignClient傳參(參數(shù)為對(duì)象類型)的一個(gè)坑
客戶端
@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)求類型是
header:{ 'content-type':'application/json' },
定義@RequestBody接收參數(shù)的headers類型必須為
header:{ 'content-type':'application/json' },
所以這樣就有沖突,feignClient和定義為'content-type':'application/x-www-form-urlencoded'的請(qǐng)求接口不能共用
解決方法
不使用對(duì)象接收,使用基本類型接收
如下
客戶端
@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)文章
Spring的Xml和JavaConfig 擴(kuò)展哪個(gè)好用
今天給大家介紹基于注解的Spring擴(kuò)展,Spring的Xml和JavaConfig 擴(kuò)展的配置方法,關(guān)于Spring的Xml和JavaConfig 擴(kuò)展你會(huì)選哪個(gè)呢,帶著這個(gè)問(wèn)題一起通過(guò)本文學(xué)習(xí)下吧2021-05-05
Springboot2.x結(jié)合Mabatis3.x下Hikari連接數(shù)據(jù)庫(kù)報(bào)超時(shí)錯(cuò)誤
本文針對(duì)Springboot2.x與Mybatis3.x結(jié)合使用時(shí),Hikari連接數(shù)據(jù)庫(kù)出現(xiàn)超時(shí)錯(cuò)誤的問(wèn)題進(jìn)行了深入分析,并提供了一系列有效的解決方法,感興趣的可以了解一下2023-11-11
mongo分布式鎖Java實(shí)現(xiàn)方法(推薦)
下面小編就為大家?guī)?lái)一篇mongo分布式鎖Java實(shí)現(xiàn)方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
Java線程Dump分析工具jstack解析及使用場(chǎng)景
這篇文章主要介紹了Java線程Dump分析工具jstack解析及使用場(chǎng)景,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
SpringBoot使用MyBatis-Plus解決Invalid?bound?statement異常
這篇文章主要介紹了SpringBoot使用MyBatis-Plus解決Invalid?bound?statement異常,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
Spring使用ThreadPoolTaskExecutor自定義線程池及異步調(diào)用方式
這篇文章主要介紹了Spring使用ThreadPoolTaskExecutor自定義線程池及異步調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
java實(shí)現(xiàn)OpenGL ES紋理映射的方法
這篇文章主要介紹了java實(shí)現(xiàn)OpenGL ES紋理映射的方法,以實(shí)例形式較為詳細(xì)的分析了紋理映射的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-06-06

