web-dev-qa-db-ja.com

Jacksonを使用してJSONのフィールド名を変更する

私はjacksonを使用して、私のオブジェクトをjsonに変換しています。オブジェクトには2つのフィールドがあります。

@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で「id」を「value」として表示し、「label」として「name」を表示するようにします。ジャックソンのドキュメントはこれについて明確ではなく、リモートでも必要なことを行うように見えるすべての注釈を試しましたが、namelabelとして表示し、idをjsonでvalueとして表示することはできません。

誰がこれを行う方法を知っていますか、これが可能であるかどうか?

148
Ali

@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; }
}
286
henrik_lundgren

Jackson 1.xにはorg.codehaus.jackson.annotate.JsonPropertyがあり、Jackson 2.xにはcom.fasterxml.jackson.annotation.JsonPropertyがあることに注意してください。使用しているObjectMapper(バージョン)を確認し、適切なアノテーションを使用していることを確認してください。

42
m3th0dman

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

Jackson MixIns

注釈付けできないサードパーティクラスを扱う場合、またはジャクソン固有の注釈でクラスを汚染したくない場合に便利です。

MixinsのJacksonのドキュメントは古いため、これは でより明確になります。基本的には、必要な方法でシリアル化を行うmixinクラスを作成します。次に、ObjectMapperに登録します。

objectMapper.addMixIn(ThirdParty.class, MyMixIn.class);
8
Dimitar II