ホームページ  >  記事  >  Java  >  Jackson でシリアル化と逆シリアル化で異なる​​プロパティ名を実現するにはどうすればよいですか?

Jackson でシリアル化と逆シリアル化で異なる​​プロパティ名を実現するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-26 05:52:30470ブラウズ

How to Achieve Different Property Names for Serialization and Deserialization with Jackson?

異なるプロパティ名による JSON シリアル化/逆シリアル化

ジャクソン ライブラリは、シリアル化および逆シリアル化中にプロパティに異なる名前を指定できる柔軟性を提供します。次のシナリオを考えてみましょう:

フィールド「red」を持つ「Codies」という名前のクラスがあります。 JSON からの逆シリアル化中に、このフィールドをプロパティ名「red」にマップする必要があります。ただし、シリアル化中は、プロパティ名を "r" にする必要があります。

解決策

これを実現するには、別のメソッドとともに @JsonProperty アノテーションを使用できます。ゲッターとセッターの名前:

public class Coordinates {
    private int red;

    @JsonProperty("r")
    public int getRed() {
        return red;
    }

    @JsonProperty("red")
    public void setRed(int red) {
        this.red = red;
    }
}

ゲッターとセッターに異なるメソッド名を使用することにより、Jackson はそれらを別個のプロパティとして認識します。逆シリアル化中に、JSON プロパティ「red」を @JsonProperty("red") アノテーションを持つセッターにマップします。シリアル化中に、@JsonProperty("r") アノテーションを持つゲッターを使用して値を取得し、プロパティ "r" としてシリアル化します。

この動作を説明するために、次のテスト コードを考えてみましょう:

Coordinates c = new Coordinates();
c.setRed(5);

ObjectMapper mapper = new ObjectMapper();
System.out.println("Serialization: " + mapper.writeValueAsString(c));

Coordinates r = mapper.readValue("{\"red\":25}", Coordinates.class);
System.out.println("Deserialization: " + r.getRed());

出力:

Serialization: {"r":5}
Deserialization: 25

ご覧のとおり、プロパティ名 "red" が使用されています。逆シリアル化中はプロパティ名 "r" がシリアル化中に使用されます。

以上がJackson でシリアル化と逆シリアル化で異なる​​プロパティ名を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。