Spring Cloud Feign 通過@feignClient修飾的類下方法返回對象必須要有無參構造對象


轉載於:https://blog.csdn.net/weixin_43333483/article/details/99219156

一、首先貼一段錯誤信息

feign.codec.DecodeException: Type definition error: [simple type, class com.xuecheng.framework.domain.cms.response.CmsPageResult]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.xuecheng.framework.domain.cms.response.CmsPageResult` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
 at [Source: (PushbackInputStream); line: 1, column: 2]

二、看我的feign 接口

  1.  
    @FeignClient(value = "XC-SERVICE-MANAGE-CMS")
  2.  
    public interface CmsPageClient {
  3.  
    //保存
  4.  
    @PostMapping("/cms/page/save")
  5.  
    public CmsPageResult save(@RequestBody CmsPage cmsPage);
  6.  
    }


  三、返回對象

  1.  
    @Data
  2.  
    public class CmsPageResult extends ResponseResult {
  3.  
     
  4.  
    //模型對象 操作是
  5.  
    CmsPage cmsPage;
  6.  
     
  7.  
     
  8.  
    public CmsPageResult( ResultCode resultCode, CmsPage cmsPage) {
  9.  
    super(resultCode);
  10.  
    this.cmsPage = cmsPage;
  11.  
    }
  12.  
     
  13.  
    }

四、有此看出,我上面的是返回模型是沒有無參構造方法的返回,那么我們填上無參構造的注解,就不報異常了

  1.  
    @Data
  2.  
    @NoArgsConstructor //無參的構造方法
  3.  
    public class CmsPageResult extends ResponseResult {
  4.  
     
  5.  
    //cms 操作是
  6.  
    CmsPage cmsPage;
  7.  
     
  8.  
    public CmsPageResult( ResultCode resultCode, CmsPage cmsPage) {
  9.  
    super(resultCode);
  10.  
    this.cmsPage = cmsPage;
  11.  
    }
  12.  
     
  13.  
    }

五、總結

首先我們來了解一下Fegin

Feign是Netflix公司開源的輕量級rest客戶端,使用Feign可以非常方便的實現Http 客戶端。Spring Cloud引入
Feign並且集成了Ribbon實現客戶端負載均衡調用(Ribbon是Netflix公司開源的一個負載均衡的項目(https://github.com/Netflix/ribbon),它是一個基於 HTTP、
TCP的客戶端負載均衡器)

Feign 工作原理如下
1、 啟動類添加@EnableFeignClients注解,Spring會掃描標記了@FeignClient注解的接口,並生成此接口的代理
對象
2、 @FeignClient(value = Eureka的服務名稱),Feign會從注冊中
心獲取cms服務列表,並通過負載均衡算法進行服務調用。
3、在接口方法 中使用注解@GetMapping("/服務的方法路徑"),指定調用的url,Feign將根據url進行遠程調

Feign注意點
SpringCloud對Feign進行了增強兼容了SpringMVC的注解 ,我們在使用SpringMVC的注解時需要注意:
1、feignClient接口 有參數在參數必須加@PathVariable("XXX")和@RequestParam("XXX")
2、feignClient返回值為復雜對象時其類型必須有無參構造函數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM