2016-03-23 42 views
2
使用序列傑克遜二傳手少財產

我使用了Spring啓動Web服務,@ requestbody.While轉換JSON到Java對象拋出錯誤消息「問題解串‘setterless’屬性」如何去在Java中

我的POJO就是這樣。

Class test 
{ 
    private List<AdminRequest> _AdminRequestSet; 
    public void addAdminRequest(AdminRequest param) 
    { 
     if (_AdminRequestSet == null) 
     { 
     _AdminRequestSet = new Vector<AdminRequest>(); 
     } 
     this._AdminRequestSet.add(param); 
    } 
    public void removeAdminRequest(AdminRequest param) 
    { 
     this._AdminRequestSet.remove(param); 
    } 
    public List<AdminRequest> getAdminRequestSet() 
    { 
     return this._AdminRequestSet; 
    } 
    public void clearAdminRequest() 
    { 
     if (_AdminRequestSet == null) 
     { 
     return; 
     } 
     _AdminRequestSet.clear(); 
    } 
} 

回答

1

該類test不符合Java bean符合。字段_AdminRequestSet的名稱不對應於獲取者getAdminRequestSet。 Jackson支持沒有setter的序列化,但必須能夠從json中的屬性名稱映射到目標類中的字段。

例如,我們有這樣的json:

{"adminRequestSet": [{"id":1},{"id":2}]}

傑克遜是能夠找到test類,吸氣getAdminRequestSet,其對應於JSON的財產adminRequestSet。但是在test這個類別中沒有設定器setAdminRequestSet而沒有字段adminRequestSet

現在你有不同的選擇。這裏常見的解決方案的列表:

選項1: 領域_AdminRequestSet重命名爲adminRequestSet(以便類測試的java bean符合)

選項2: 使用annotation指定屬性命名爲現場

@JsonProperty("adminRequestSet") 
private List<AdminRequest> _AdminRequestSet; 

選項3: 如果你不能改變類test,你可以使用Jackson MixIns

abstract class testMixIn { 
    @JsonProperty("adminRequestSet") 
    private List<AdminRequest> _AdminRequestSet; 
} 

//register testMixin for class test 
objMapper.addMixIn(test.class, testMixIn.class); 
+0

感謝您的快速反應。你的答案解決了我的問題。 – Danda

+0

不客氣,如果它適合你,你可以標記答案是正確的:) –