2016-11-12 81 views
1

使用傑克遜上課好像我需要執行不帶任何參數默認構造函數,也是我的其它構造把所有的默認值反序列化JSON屬性重載方法構造錯誤

class Application(artistViewUrl: String="", 
        trackViewUrl: String="", 
        price: String="", 
        artworkUrl100: String="" 
       ) extends AppleBase { 
    def this() { 
    this("") 
    } 

} 

沒有默認值我有錯誤

Error:(14, 5) overloaded method constructor Application with alternatives: 
()appleSearch.model.app.Application <and> 
    (artistViewUrl: String,trackViewUrl: String,price: String,artworkUrl100: String)appleSearch.model.app.Application 
cannot be applied to (String) 
    this("") 

如果我刪除非參數的構造函數,傑克遜拋出此異常

com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of politrons.apple.search.model.music.Album: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?) 
at [Source: [email protected]; line: 1, column: 3] (through reference chain: java.util.ArrayList[0]) 

任何想法爲什麼?

+1

我不確定我是否理解你的問題。你有兩個構造函數:0和4個參數(沒有默認值)。然後,您嘗試將其中的一個應用於空字符串。當然,他們不適合,因爲你沒有一個只需要一個字符串的構造函數。而在默認情況下,您只需調用4-args構造函數將第一個元素設置爲'「」'。 – laughedelic

+0

如果刪除'def this()'構造函數,會發生什麼情況? – pedrofurla

+0

@pedrofurla傑克遜拋出異常,檢查我的更新 – paul

回答

1

類型檢查器無法推斷出調用的正確構造函數。通過只指定一個參數,所有構造函數都不會匹配。您需要指定所有參數:this("", "", "", ""),或使用默認參數,如您的示例中所示。

+0

但任何想法爲什麼傑克遜迫使我創建一個沒有參數的默認構造函數? – paul

+0

傑克遜不夠聰明,無法使用自定義構造函數。它需要通過默認的構造函數實例化一個類,然後可能使用反射來設置所有的字段。這是大多數Java框架的工作方式。 –