最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決feignClient調(diào)用時(shí)獲取返回對象類型匹配的問題

 更新時(shí)間:2021年06月24日 14:36:21   作者:黃三yeah  
這篇文章主要介紹了解決feignClient調(diào)用時(shí)獲取返回對象類型匹配的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

feignClient調(diào)用時(shí)獲取返回對象類型匹配

feignClient是springCloud體系中重要的一個(gè)組件,用于微服務(wù)之間的相互調(diào)用,底層為httpClient,在之前的應(yīng)用中,我一直以為A服務(wù)提供的方法返回類型為對象的話,那么調(diào)用A服務(wù)的B服務(wù)必須也用字段類型以及命名完全相同的對象來接收,為此我驗(yàn)證了一下,發(fā)現(xiàn)不是必須用完全相同的對象來接收,比如,可以用map<String,Object>或者Object來接收,然后解析。

當(dāng)然,復(fù)雜對象我還是推薦用一個(gè)完全相同的對象來接收。

下面是我的例子:

feignClient是springCloud體系中重要的一個(gè)組件,用于微服務(wù)之間的相互調(diào)用,底層為httpClient,在之前的應(yīng)用中,我一直以為A服務(wù)提供的方法返回類型為對象的話,那么調(diào)用A服務(wù)的B服務(wù)必須也用字段類型以及命名完全相同的對象來接收,為此我驗(yàn)證了一下,發(fā)現(xiàn)不是必須用完全相同的對象來接收,比如,可以用map<String,Object>或者Object來接收,然后解析。

當(dāng)然,復(fù)雜對象我還是推薦用一個(gè)完全相同的對象來接收。

下面是我的例子:

項(xiàng)目一:首先創(chuàng)建一個(gè)服務(wù)注冊中心eureka

配置文件

項(xiàng)目二:緊接著創(chuàng)建一個(gè)服務(wù)提供方eureka-client,方法helloWorld返回值為map

注冊到eureka中

項(xiàng)目三:創(chuàng)建服務(wù)調(diào)用方service-feign

注意:map的key與Hello類字段屬性對應(yīng)

注冊到eureka

最后:啟動三個(gè)項(xiàng)目

發(fā)現(xiàn)項(xiàng)目二 項(xiàng)目三已經(jīng)被注冊到服務(wù)中心

調(diào)用項(xiàng)目三的接口

可以正常返回,由于項(xiàng)目二返回類型是map.而項(xiàng)目三是用對象Hello來接收的,那么就說明了服務(wù)提供方的返回值類型和調(diào)用方接收值類型并不是需要完全對應(yīng)的。

feignClient傳參(參數(shù)為對象類型)的一個(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();
}

這么傳參是沒問題的,服務(wù)端也能接收到

但是,問題來了,

小程序的post請求的header必須為

header:{ 'content-type':'application/x-www-form-urlencoded'  }, 

導(dǎo)致后臺為@RequestBody接收不到參數(shù),

feignClient默認(rèn)參數(shù)請求類型是

header:{ 'content-type':'application/json'  }, 

定義@RequestBody接收參數(shù)的headers類型必須為

header:{ 'content-type':'application/json'  }, 

所以這樣就有沖突,feignClient和定義為'content-type':'application/x-www-form-urlencoded'的請求接口不能共用

解決方法

不使用對象接收,使用基本類型接收

如下

客戶端

@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)文章

最新評論

克什克腾旗| 当雄县| 从化市| 巨野县| 汝州市| 锡林郭勒盟| 行唐县| 淄博市| 西华县| 隆子县| 尚义县| 丹寨县| 海淀区| 土默特右旗| 静乐县| 罗甸县| 东乡县| 泰和县| 沅江市| 托克托县| 龙门县| 黑水县| 扬中市| 交城县| 定边县| 牟定县| 拜城县| 辽阳县| 乡宁县| 全南县| 大安市| 龙陵县| 宜章县| 武邑县| 京山县| 扎赉特旗| 垦利县| 望谟县| 兴和县| 宁都县| 图片|