2011-08-31 10 views
103

私はjacksonを使用して、私のオブジェクトをjsonに変換しています。私は「ラベル」として表示されるように、JSONの「価値」と「名」として表示されるように私が欲しいjQueryのオートコンプリート機能「ID」でこれを使用したいのでジャクソンを使用して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; } 
} 

: オブジェクトは、2つのフィールドを持っています。 jacksonのドキュメントはこれではっきりしていませんが、リモートでも私が必要とするように見えるすべての注釈を試しましたが、namelabelと表示され、idはjsonにvalueと表示されません。

これを行う方法を知っている人、またはこれが可能な人はいますか?

+0

他の目的やビジネスロジックのためにエンティティ(「City」)を使用する可能性がある場合は、そのJSON表現をLabel&Valueとして定義しないでください。 OTOHこれがコンボに使用される純粋に参照データであれば、これらをすべてカバーするジェネリックエンティティ(ペアまたはオプション)を検討する可能性のあるアプローチです。 –

答えて

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を使用していますが、これは動作しません: -/Strange! – Nikhil

+0

ジャクソンは実際に設定されたプロバイダで、何か他のものではないことを確認してください –

27

ジャクソン2.xではジャクソンの1.xでorg.codehaus.jackson.annotate.JsonPropertycom.fasterxml.jackson.annotation.JsonPropertyがあることに注意してくださいどのバージョンのObjectMapperを使用しているかを確認し、適切な注釈を使用していることを確認してください。

5

フィールドの名前を変更する1つの以上のオプションがあります:

Jackson MixInsが。

第三者のクラス()にの注釈を付けることができない、またはジャクソン固有の注釈でクラスを汚染したくない第三者のクラスを扱う場合に役立ちます。

関連する問題