Jackson でシリアル化と逆シリアル化に異なるプロパティ名を使用する方法は?

Barbara Streisand
リリース: 2024-10-26 06:30:30
オリジナル
421 人が閲覧しました

How to Use Different Property Names for Serialization and Deserialization in Jackson?

Jackson でのシリアル化と逆シリアル化の異なるプロパティ名

JSON プロパティはシリアル化と逆シリアル化中に異なる名前を持つことができますか? Jackson ライブラリでは、このカスタマイズが可能です。

たとえば、座標クラスを考えてみます。

<code class="java">class Coordinates {
  int red;
}</code>
ログイン後にコピー

JSON から逆シリアル化する場合、次の形式が必要です。

<code class="json">{
  "red": 12
}</code>
ログイン後にコピー

ただしシリアル化中は次のようにフォーマットする必要があります:

<code class="json">{
  "r": 12
}</code>
ログイン後にコピー

@JsonProperty アノテーションを使用してこれを実装すると、ゲッターとセッターの両方の名前が異なるため、意図したとおりに動作しません:

<code class="java">class Coordinates {
    int red;

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

    @JsonProperty("red")
    public void setRed(byte red) {
      this.red = red;
    }
}</code>
ログイン後にコピー

これにより、「認識されないフィールド "赤"」例外が発生します。

これに対処するには、ゲッターとセッターに異なるメソッド名を使用します。

<code class="java">public class Coordinates {
    byte red;

    @JsonProperty("r")
    public byte getR() {
      return red;
    }

    @JsonProperty("red")
    public void setRed(byte red) {
      this.red = red;
    }
}</code>
ログイン後にコピー

このようにして、Jackson はプロパティを次のように認識します。フィールドが異なるため、シリアル化および逆シリアル化中に異なる名前を使用できます。

例:

<code class="java">Coordinates c = new Coordinates();
c.setRed((byte) 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.getR());</code>
ログイン後にコピー

印刷:

Serialization: {"r": 5}
Deserialization: 25
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート