2013-12-11 47 views
1

我有填充一個隱藏變量調用它的setter方法時,一個POJO。爪哇 - 用反序列化getter/setter方法,而不是反射

我的POJO幾乎是相同的: Gson POJO mapping loses custom field value

我使用傑克遜在我的JAX-RS項目1.9.6。在進行REST調用時,它會使用JSON並自動將其轉換爲pojo的實例。我相信傑克遜正在使用反射來做到這一點。這對我來說不好的原因是因爲反射繞過了setter方法,我的隱藏變量從未被填充過。

我如何告訴傑克遜以避免反光,並專門調用getter/setter方法?我必須用@JsonDeserialize來標記每個pojo嗎?如果是這樣,我會如何編寫一個通用的解串器(又名MyDeserializer extends JsonDeserializer<T>)來處理不同的pojos?有沒有更好的方法,我沒有想到?

注意:在測試用例(REST之外)中,我已成功使用ObjectMapper.readValue(json,class),但我不確定如何將該代碼遷移到JsonDeserializer中。

+0

如果變量是私有的,傑克遜使用getter/setter方法。如果他們是公開的,你應該可以通過註釋來做到這一點。不需要自定義的反序列化器。 – tom

+0

哪些註釋?我有JsonProperty – user2992188

+0

標註的所有變量標註您的getter方法,而不是私有變量... – MattR

回答

0

我有一個類似的問題:我用改造,以及傑克遜和反序列化JSON的鍵總是忽略我的註釋setter和在私人領域中的反射和永遠不會設置任何東西。事實證明,我需要的信息(RTFM)的寶石是Retrofit默認使用GSON,那就是GSON行爲。傑克遜並未被用於反序列化。

所以你需要編寫使用傑克遜改造轉換器。這方面的一個例子可以在這裏找到:http://kdubblabs.com/java/retrofit-by-square/retrofit-using-jackson-json-conversion/