HOWTO · Java

Java の Jackson でカスタム シリアライザを使用する

このチュートリアルでは、Java で Jackson を使用してカスタム シリアライザーを使用する方法について説明します。

このページの内容

このチュートリアルでは、Java で Jackson を使用してカスタム シリアライザーを使用する方法について説明します。 まず、シリアル化の概念を見てみましょう。

Java でのシリアル化

Java のシリアル化プロセスは、オブジェクトをバイト ストリームとの間で変換する手法です。 これにより、オブジェクトをファイルに保存できるだけでなく、オブジェクトをネットワーク経由で送信することも可能になります。

シリアル化プロセスは、Serializable インターフェイスの実装を作成することから始まり、続いて Java.io を使用します。

クラスに Jackson を使用したカスタム シリアライザー

CustomerProduct という 2つの単純なクラスを作成しましょう。

コード - Customer クラス:

public class Customer {
  public int id;
  public String Cname;
}

コード - 製品 クラス:

public class Product {
  public int id;
  public String Productname;
  public Customer buyer;
}

クラスに JsonSerialize を適用する

次に、次のようにクラスにシリアライザーを登録します。

@JsonSerialize(using = ProductSerializer.class)
public class Product {
  public int id;
  public String Productname;
  public Customer buyer;
}

次に、標準のシリアル化を適用します。

Product p = new Product(10, "drinks", new Customer(12, "Peter"));
String serialized = new ObjectMapper().writeValueAsString(p);

最後に、シリアライザーによって生成され、@JsonSerialize を使用して定義された、個別化された JSON 出力を取得します。

Java で serialize() メソッドを使用する

StdSerializer クラスを使用して、カスタム シリアライザーを実装できます。 この場合、serialize() メソッドをオーバーライドする必要があります。

構文:

public abstract void serialize(Product val, JsonGenerator jg, SerializerProvider p)
    throws IOException

カスタム シリアライザーを使用してもかまわない場合は、Product クラス用に開発する必要はありません。 代わりに、Customer クラス用に作成する必要があります。

public void serialize(Product value, JsonGenerator jg, SerializerProvider p)
    throws IOException, JsonProcessingException {
  jg.writeNumber(id);
}