2015-09-03 66 views
0

我有一個REST服務發送一個對象A.此對象包含對另一個對象類型B的引用。當我通過REST服務請求對象A時,字段A但包含字段B.對象的RESTEasy序列化不包括嵌套對象

我想要一個Json,包括類的嵌套對象。

未序列化的字段有這樣的標籤:

@ManyToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST}) 
private B b; 

@OneToOne(fetch=FetchType.LAZY,cascade={CascadeType.ALL},orphanRemoval=true) 
private C c; 

我也試圖通過EAGER,但沒有運氣了變化懶惰。

+0

你在A上有一個公共的getter嗎?默認情況下,Jackson不會序列化私有字段 – Franck

+0

是的,我確實對所有字段都有getter和setter,只是兩個受影響的字段與其他字段具有不同的函數名稱。而不是getB()setB(B b)我有b()和b(B b)。 (班級由第三方生成)你認爲這可能是問題嗎? – XaviGG

+2

絕對如此。所有這些使用反射的框架都基於java bean標準,該標準決定了getter和setter。另一種可能是配置傑克遜訪問你的私人領域進行序列化。 – Franck

回答

0

默認情況下,傑克遜不序列化私人領域。如果你想改變這種行爲,你可以用以下注釋來註釋你的課程:

@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) 
public class A{... 
+0

我只需要解決這個事實,即在部署時,它找不到註釋的傑克遜模塊,但看起來是正確的方法。我還測試了臨時替代公開限定符以驗證它在該情況下序列化字段;它確實如此。 – XaviGG

+1

您可以使用@XmlAccessorType(XmlAccessType.FIELD)替代@JSonAutoDetect。在這種情況下,您將不會找到任何模塊/類。 – Franck