1概要

このクイックチュートリアルでは、

Custom Serializer

を使ってJackson 2でJavaエンティティをシリアライズする方法を説明します。

あなたがもっと深く掘り下げて

あなたがジャクソン2

ですることができる** 他のクールなことを学びたいなら –

メインのジャクソンチュートリアル

に向かって進んでください。


2オブジェクトグラフの標準直列化

2つの単純なエンティティを定義し、Jacksonがカスタムロジックなしでこれらをシリアル化する方法を見てみましょう。

public class User {
    public int id;
    public String name;
}
public class Item {
    public int id;
    public String itemName;
    public User owner;
}

それでは、

Item

エンティティを

User

エンティティでシリアル化しましょう。

Item myItem = new Item(1, "theItem", new User(2, "theUser"));
String serialized = new ObjectMapper().writeValueAsString(myItem);

これにより、両方のエンティティに対して完全なJSON表現が得られます。

{
    "id": 1,
    "itemName": "theItem",
    "owner": {
        "id": 2,
        "name": "theUser"
    }
}

** 3

ObjectMapper

のカスタムシリアライザ

**

それでは、

User

オブジェクト全体ではなく

User



id

をシリアライズするだけで

上記のJSON出力を単純化しましょう

。次のような、より単純なJSONを入手したいです。

{
    "id": 25,
    "itemName": "FEDUfRgS",
    "owner": 15
}

簡単に言うと、

Item

オブジェクトに対して

カスタムシリアライザ

を定義する必要があります。

public class ItemSerializer extends StdSerializer<Item> {

    public ItemSerializer() {
        this(null);
    }

    public ItemSerializer(Class<Item> t) {
        super(t);
    }

    @Override
    public void serialize(
      Item value, JsonGenerator jgen, SerializerProvider provider)
      throws IOException, JsonProcessingException {

        jgen.writeStartObject();
        jgen.writeNumberField("id", value.id);
        jgen.writeStringField("itemName", value.itemName);
        jgen.writeNumberField("owner", value.owner.id);
        jgen.writeEndObject();
    }
}

それでは、このカスタムシリアライザを

Item

クラスの

ObjectMapper

に登録して、シリアル化を実行する必要があります。

Item myItem = new Item(1, "theItem", new User(2, "theUser"));
ObjectMapper mapper = new ObjectMapper();

SimpleModule module = new SimpleModule();
module.addSerializer(Item.class, new ItemSerializer());
mapper.registerModule(module);

String serialized = mapper.writeValueAsString(myItem);

それがそれです – 私たちは現在、

Item→ User

エンティティのよりシンプルでカスタムなJSONシリアライゼーションを持っています。


4クラスのカスタムシリアライザ


ObjectMapper

ではなく

クラスに直接シリアライザを

登録することもできます。

@JsonSerialize(using = ItemSerializer.class)
public class Item {
    ...
}

さて、

標準的なシリアル化

を実行するとき:

Item myItem = new Item(1, "theItem", new User(2, "theUser"));
String serialized = new ObjectMapper().writeValueAsString(myItem);

シリアライザによって作成され、

@ JsonSerialize

で指定されたカスタムJSON出力を取得します。

{
    "id": 25,
    "itemName": "FEDUfRgS",
    "owner": 15
}

これは、

ObjectMapper

に直接アクセスして設定できない場合に役立ちます。


5結論

この記事では、シリアライザを使用してJackson 2でカスタムJSON出力を取得する方法を説明しました。

これらすべての例とコードスニペットの実装はhttps://github.com/eugenp/tutorials/tree/master/jackson#readme[GitHub]** にあります。そのままインポートして実行するのは簡単です。