反序列化時,java類需要無參構造函數

反序列化時,java類需要無參構造函數

現象

  今天在調http接口時,接收到的返回值一直是null,debug後發現系統拋了“No suitable constructor found for type 。。。”,說明這個類沒有無參數構造函數(由於建了別的構造函數,覆蓋了無參構造函數),拋異常後代碼熔斷,進入fallback(熔斷處理方法)方法,這個方法默認返回null,所以這個對象爲null,而且這個異常被捕捉了,所以日誌上看不出來。

 private List<Image> detailImages;  //我在response中添加了這個屬性

 public static class Image {
        private String smallUrl;

        private String largeUrl;

        private int largeUrlWidth;

        private int largeUrlHeight;
  //沒有無參構造函數
        public Image(String smallUrl, String largeUrl) {
            this.smallUrl = smallUrl;
            this.largeUrl = largeUrl;
        }

        public Image(String smallUrl, String largeUrl, int largeUrlWidth, int largeUrlHeight) {
            this.smallUrl = smallUrl;
            this.largeUrl = largeUrl;
            this.largeUrlWidth = largeUrlWidth;
            this.largeUrlHeight = largeUrlHeight;
        }

        public int getLargeUrlWidth() {
            return largeUrlWidth;
        }

        public void setLargeUrlWidth(int largeUrlWidth) {
            this.largeUrlWidth = largeUrlWidth;
        }

        public int getLargeUrlHeight() {
            return largeUrlHeight;
        }

        public void setLargeUrlHeight(int largeUrlHeight) {
            this.largeUrlHeight = largeUrlHeight;
        }

        public String getSmallUrl() {
            return smallUrl;
        }

        public void setSmallUrl(String smallUrl) {
            this.smallUrl = smallUrl;
        }

        public String getLargeUrl() {
            return largeUrl;
        }

        public void setLargeUrl(String largeUrl) {
            this.largeUrl = largeUrl;
        }
    }

原因

  json在轉對象反序列化的時候,需要先初始化對象,默認調用無參構造函數,再賦值,所以拋出異常。

解決辦法

  添加無參構造函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章