2016-01-06 45 views
0

如果傑克遜以前見過User對象相匹配,它將使用ObjectIdGenerator輸出ID而不是實際的對象。更改JSON屬性名稱,如果傑克遜決定使用ObjectIdentity進行提供類</p> <pre><code>@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") public class User { public int id; public User other; } </code></pre> <p>輸出

輸出示例:

{ 
    "id": 1257, 
    "other" : { 
    "id": 411, 
    "other": 1257 
    } 
} 

不過,我想使用一個不同的屬性名稱,如果對象ID被觸發,因此輸出看起來像

{ 
    "id": 1257, 
    "other" : { 
    "id": 411, 
    "otherRef": 1257 
    } 
} 

請問一個自定義序列做到這一點?我可以找到很多示例,其中屬性值由自定義序列化程序更改,但沒有屬性名稱根據屬性值更改的示例。

回答

0

您可以使用@JsonGetter來做到這一點。用@JsonIgnore標記字段,然後創建名稱爲getOtherRef的方法,標記爲@JsonGetter

+0

這是行不通的。然後,你會最終{ 「ID」:1257, 「otherRef」:{ 「ID」:411, 「otherRef」:1257 }} 哦 – dbrown0708

+0

,你說得對。我沒有處理'User'的嵌套。使用自定義序列化器可能會非常棘手,因爲您必須跟蹤序列化程序找到的用戶,然後在開始時重新初始化上下文。也許你需要一個自定義的序列化程序用於User類,然後是另一個用於該字段(或另一個getter)的序列化程序。但是我沒有看到他們將如何一起工作並且線程安全,等等。 – objectuser

相關問題

 相關問題