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

使用Feign遠(yuǎn)程調(diào)用時,序列化對象失敗的解決

 更新時間:2021年07月08日 14:35:30   作者:走了一些彎路  
這篇文章主要介紹了使用Feign遠(yuǎn)程調(diào)用時,序列化對象失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Feign遠(yuǎn)程調(diào)用序列化對象失敗

最近在搭建一個SpringCloud的微服務(wù)時,遇到了一個問題,在使用Feign遠(yuǎn)程調(diào)用時報錯,返回對象沒有無參構(gòu)造方法,有其他的含參數(shù)的構(gòu)造方法。

本地自己搭建的微服務(wù)目錄大概如下,才剛開始,后續(xù)會逐漸補(bǔ)充優(yōu)化迭代,有興趣的可以fork下地址:

https://github.com/zhanghailang123/MyCloud

給與指導(dǎo)意見。

  • Eureka:注冊中心服務(wù)端,采用Eureka注冊中心
  • EurekaClientA:其中的一個Eureka服務(wù)端,命名有點(diǎn)隨意,相當(dāng)于一個數(shù)據(jù)提供中心,暫時沒有使用ORM框架對接數(shù)據(jù)庫,把相應(yīng)數(shù)據(jù)寫死了,目前只是在練習(xí)使用為了方便,后續(xù)考慮使用SpringJPA,因為Mb用的太多了
  • FeignZ:feign模塊遠(yuǎn)程調(diào)用加負(fù)載均衡,而且整合了Hystrix熔斷機(jī)制,當(dāng)然目前只做了最簡單的Demo,練習(xí)下手感
  • HystrixDashboard :Hystrix儀表盤,可以關(guān)注下當(dāng)前的服務(wù)器狀況

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-1iElFSJl-1610638015331)(使用Feign遠(yuǎn)程調(diào)用時,序列化對象失敗.assets/clipboard.png)]

  • RibbonZ:主要用作于負(fù)載均衡,啟動時可以啟動EurekaClientA 多次指定不同的端口號,來測試下負(fù)載均衡,一般都是用Feign直接遠(yuǎn)程調(diào)用,內(nèi)置了ribbon,這個demo中也是為了測試用的。
  • TurBineZ:用來監(jiān)控集群的熔斷情況。
  • ZuulZ:網(wǎng)關(guān)

在這里插入圖片描述

接下來進(jìn)入正題。

場景: 在使用Feign遠(yuǎn)程調(diào)用寫死的數(shù)據(jù)服務(wù)EurekaClientA時,報錯如下

feign模塊如下:

在這里插入圖片描述

此處為了復(fù)現(xiàn)問題,將熔斷邏輯暫時注釋掉

此處報錯信息:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.example.pojo.Student` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

報錯的對象 :org.example.pojo.Student 如下,一個很簡單的bean對象:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-SKoeb8Wz-1610638015338)(使用Feign遠(yuǎn)程調(diào)用時,序列化對象失敗.assets/image-20210114230523431.png)]

那為什么會報這個問題呢 :不存在無參構(gòu)造函數(shù),序列化失敗

帶著疑問走進(jìn)報錯的地方:

可以看到是這個地方 canInstantiate()方法校驗沒通過。在此處打個斷點(diǎn)一探究竟

這個校驗里面內(nèi)容是:

總之都是校驗無參構(gòu)造函數(shù)。如果給調(diào)用的student對象加上無參構(gòu)造函數(shù)就可以成功調(diào)用。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-iFpjTYoT-1610638015342)(使用Feign遠(yuǎn)程調(diào)用時,序列化對象失敗.assets/image-20210114231909848.png)]

構(gòu)造函數(shù)就可以成功調(diào)用。**

問題倒不是什么大問題,在搭建服務(wù)過程中,只有親力親為,切實參與到了,才能感受到各種奇奇怪怪的小問題,也只有這樣自己親自動手,才是收獲最大的。

Feign做遠(yuǎn)程調(diào)用的注意點(diǎn)

在使用feign的過程中遇到了一些問題,所以在這里做以下總結(jié)

1.定義的做遠(yuǎn)程調(diào)用的api接口

中的方法參數(shù)列表中的參數(shù)都必須都要打上@RequestParam(“value”) 注解**,否則調(diào)用會報405異常,這一點(diǎn)是和controller中不一樣的,controller中的方法只要參數(shù)名和前臺傳入的參數(shù)鍵名對應(yīng)上就能自動綁定上參數(shù)

復(fù)雜類型用必須打上@RequestBody注解

2.service微服務(wù)中的Controller的參數(shù)綁定

如果參數(shù)列表中有復(fù)雜類型,請使用Post請求,使用Get請求會報Bad Request錯誤,且需要打上@RequestBody注解,而普通基本類型可以不用打上@RequestParam注解可自動綁定參數(shù)

如有其它問題,也歡迎補(bǔ)充,放一下代碼:

api:

@FeignClient("MS-ADMIN-SERVICE")
public interface FixFeignService {
    @GetMapping("/fix")
    public List<FixInfo> findAll();
    @PostMapping("/fix/add")
    public int insert(@RequestBody FixInfo fixInfo);
    @PostMapping("/fix/limitByParam")
    public LayUIPageBean limitByParam(@RequestBody FixInfo fixInfo, @RequestParam("page") Integer page, @RequestParam("limit") Integer limit);
    @PostMapping("/fix/delByIds")
    public boolean delByIds(@RequestParam("ids[]") Long[] ids);
    @GetMapping("/fix/findById")
    public FixInfo findById(@RequestParam("id") Long id);
    @PostMapping("/fix/update")
    boolean update(@RequestBody FixInfo fixInfo);
}

service微服務(wù)

@RestController
@RequestMapping("/fix")
@Slf4j
public class FixInfoController {
    @Autowired
    private FixInfoService fixInfoService;
    @GetMapping("")
    public List<FixInfo> findAll(){
        List<FixInfo> all = fixInfoService.findAll();
        return all;
    }
    @PostMapping("/add")
    public int insert(@RequestBody FixInfo fixInfo){
        return fixInfoService.insert(fixInfo);
    }
    @PostMapping("/limitByParam")
    public LayUIPageBean limitByParam(@RequestBody FixInfo fixInfo,Integer page,Integer limit){
        LayUIPageBean layUIPageBean = new LayUIPageBean();
        PageHelper.startPage(page,limit);
        List<FixInfo> all = fixInfoService.findByParam(fixInfo);
        PageInfo<FixInfo> pageInfo = new PageInfo<>(all);
        return layUIPageBean.setCount((int)pageInfo.getTotal()).setData(pageInfo.getList());
    }
    @PostMapping("/delByIds")
    public boolean delByIds(@RequestParam("ids[]") Long[] ids){
        //log.info("id"+ids[0]);
        boolean flag= fixInfoService.delByIds(ids);
        return flag;
    }
    @GetMapping("/findById")
    public FixInfo findById(Long id){
        return fixInfoService.findById(id);
    }
    @PostMapping("/update")
    public boolean update(@RequestBody FixInfo fixInfo){
       return fixInfoService.update(fixInfo);
    }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談Java編程中string的理解與運(yùn)用

    淺談Java編程中string的理解與運(yùn)用

    這篇文章主要介紹了淺談Java編程中string的理解與運(yùn)用,還是比較不錯的,這里分享給大家,供需要的朋友參考。
    2017-11-11
  • Java ServletContext對象原理及功能解析

    Java ServletContext對象原理及功能解析

    這篇文章主要介紹了Java ServletContext對象原理及功能解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • springboot?整合?clickhouse的實現(xiàn)示例

    springboot?整合?clickhouse的實現(xiàn)示例

    本文主要介紹了springboot?整合?clickhouse的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java調(diào)用Redis集群代碼及問題解決

    Java調(diào)用Redis集群代碼及問題解決

    這篇文章主要介紹了Java調(diào)用Redis集群代碼及問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Java中HashMap集合的常用方法詳解

    Java中HashMap集合的常用方法詳解

    本篇文章給大家?guī)淼膬?nèi)容是關(guān)于Java中HashMap集合的常用方法詳解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。下面我們就來學(xué)習(xí)一下吧
    2021-11-11
  • Java經(jīng)典面試題最全匯總208道(二)

    Java經(jīng)典面試題最全匯總208道(二)

    這篇文章主要介紹了Java經(jīng)典面試題最全匯總208道(二),本文章內(nèi)容詳細(xì),該模塊分為了六個部分,本次為第二部分,需要的朋友可以參考下<BR>
    2023-01-01
  • 詳解XML,Object,Json轉(zhuǎn)換與Xstream的使用

    詳解XML,Object,Json轉(zhuǎn)換與Xstream的使用

    這篇文章主要介紹了詳解XML,Object,Json轉(zhuǎn)換與Xstream的使用的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java基于Tcp協(xié)議的socket編程實例

    Java基于Tcp協(xié)議的socket編程實例

    這篇文章主要介紹了Java基于Tcp協(xié)議的socket編程實例,較為詳細(xì)的分析了socket編程客戶端與服務(wù)器端的具體實現(xiàn)步驟與使用技巧,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • SpringBoot監(jiān)控SQL運(yùn)行情況的流程步驟

    SpringBoot監(jiān)控SQL運(yùn)行情況的流程步驟

    Druid是Java語言中最好的數(shù)據(jù)庫連接池,雖然?HikariCP?的速度稍快,但是,Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能?,也是阿里巴巴的開源項目,本文給大家介紹了SpringBoot監(jiān)控SQL運(yùn)行情況的流程步驟,需要的朋友可以參考下
    2024-03-03
  • Java中的Semaphore計數(shù)信號量詳細(xì)解析

    Java中的Semaphore計數(shù)信號量詳細(xì)解析

    這篇文章主要介紹了Java中的Semaphore計數(shù)信號量詳細(xì)解析,Semaphore?是一個計數(shù)信號量,必須由獲取它的線程釋放,常用于限制可以訪問某些資源的線程數(shù)量,例如通過?Semaphore?限流,需要的朋友可以參考下
    2023-11-11

最新評論

清原| 子长县| 绥化市| 华容县| 洪江市| 正阳县| 台前县| 辽源市| 容城县| 格尔木市| 岚皋县| 临西县| 马关县| 永丰县| 平谷区| 宁远县| 锡林郭勒盟| 尼木县| 湄潭县| 罗江县| 怀仁县| 南漳县| 库尔勒市| 易门县| 阿尔山市| 临泉县| 城市| 内乡县| 兰州市| 玉环县| 田东县| 阿拉尔市| 铜陵市| 墨脱县| 乌兰察布市| 宁陕县| 深州市| 建平县| 沂水县| 沅江市| 湄潭县|