2014-09-20 23 views
0

我試圖使用ModelMapper來映射下面的json,如http://modelmapper.org/user-manual/gson-integration/所解釋的,但是我得到一個NullPointerException,我無法確定哪裏出了什麼問題。請提供任何提示?ModelMapper:如何將這個json映射到Java?

{"a": "aaa", "b": [{"c": "ccc"}]} 

public class Foo { 
    private String a; 
    private ArrayList<Bar> b; 
} 



public class Bar { 
    private String c; 
} 

ModelMapper mapper = new ModelMapper(); 
mapper.getConfiguration().addValueReader(new JsonElementValueReader()); 
JsonElement responseElement = new JsonParser().parse(json); 
Foo foo = mapper.map(responseElement, Foo.class); 
+0

你從哪裏得到'NullPointerException'? – 2014-09-20 16:51:16

+0

當發佈「爲什麼會出現此錯誤」類型的問題時,您需要(至少)發佈完整堆棧跟蹤,並指出代碼中的哪一行正在拋出異常。更好的辦法是發佈[SSCCE](http://sscce.org/)。 – azurefrog 2014-09-20 16:56:09

+0

這是我得到的堆棧跟蹤:https://gist.github.com/dabd/1b84bab88144ff6bc873#file-gistfile1-txt – dmz73 2014-09-21 10:00:20

回答

1

在回顧了你的意思和你對問題的評論之後,這很可能是他們實施中的一個錯誤。爲ValueReader的Javadoc聲稱

返回所有成員名稱爲源對象,否則null如果源沒有任何成員。

但是,使用此方法的唯一代碼PropertyInfoSetResolver#resolveAccessors(...)未檢查是否存在null。 JSON中的成員名稱只對對象有意義,但在這裏,您有一個JSON數組。這就是它失敗的原因。

據我所知,代碼不檢查null也不檢查source類型沒有成員。我認爲這是一個錯誤。通過用數組類型替換任何字段(和相應的JSON),該錯誤很容易從示例示例中重現。您可能想聯繫開發人員或更改庫。

+0

謝謝。這似乎是原因。當我追蹤圖書館的執行情況時,我注意到了這一點。希望作者能夠解決這個小錯誤。 – dmz73 2014-09-23 06:43:26