2011-08-31 39 views
103

我正在使用jackson將我的對象轉換爲json。 對象有2個字段:使用Jackson更改JSON中的字段名稱

@Entity 
public class City { 
    @id 
    Long id; 
    String name; 
    public String getName() { return name; } 
    public void setName(String name){ this.name = name; } 
    public Long getId() { return id; } 
    public void setName(Long id){ this.id = id; } 
} 

因爲我想用這個與jQuery的自動完成功能,我想「身份證」,以顯示爲JSON「價值」和「名稱」顯示爲「標籤」 。傑克遜的文檔不清楚,我已經嘗試了每個註釋,甚至遠程似乎它是我需要的,但我不能讓name顯示爲labelid在json中顯示爲value

有誰知道如何做到這一點,或者如果這是可能的?

+0

if如果您曾經想將實體(「城市」)用於任何其他目的或商業邏輯,我會避免將其JSON表示定義爲標籤和值。 OTOH如果這純粹是用於組合的參考數據,那麼您可能會有更多 - 使通用實體(Pair或Option)涵蓋所有這些是可能的方法來考慮。 –

回答

214

您是否嘗試過使用@JsonProperty?

@Entity 
public class City { 
    @id 
    Long id; 
    String name; 

    @JsonProperty("label") 
    public String getName() { return name; } 

    public void setName(String name){ this.name = name; } 

    @JsonProperty("value") 
    public Long getId() { return id; } 

    public void setId(Long id){ this.id = id; } 
} 
+3

是的,我曾嘗試過,但是我在做'@JsonProperty(value =「label」)',它不工作,我按照您的建議嘗試了它,它的工作原理!謝謝,這真的有助於簡化代碼。 – Ali

+0

我有類似的要求。只是我在RESTEasy中使用Jackson,這不起作用: - /奇怪! – Nikhil

+0

驗證傑克遜真的是配置的提供者,而不是別的 –

27

要知道,有傑克遜的1.x org.codehaus.jackson.annotate.JsonPropertycom.fasterxml.jackson.annotation.JsonProperty傑克遜2.x版本檢查您使用的是哪個ObjectMapper(從哪個版本開始),並確保使用正確的註釋。

5

還有一個選項來重場:

Jackson MixIns

如果您處理第三方課程,這很有用,您是無法註釋,或者您只是不想用Jackson特定的註釋污染該課程。