Jackson - Serializer Khusus

1. Ikhtisar

Tutorial singkat ini akan menunjukkan cara membuat serial entitas Java dengan Jackson 2 menggunakan Serializer Kustom .

Jika Anda ingin menggali lebih dalam dan mempelajari hal-hal keren lainnya yang dapat Anda lakukan dengan Jackson 2 - lanjutkan ke tutorial utama Jackson.

2. Serialisasi Standar dari Grafik Objek

Mari kita definisikan 2 entitas sederhana dan lihat bagaimana Jackson membuat serial ini tanpa logika khusus:

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

Sekarang, mari membuat serial entitas Item dengan entitas Pengguna :

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

Ini akan menghasilkan representasi JSON penuh untuk kedua entitas:

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

3. Custom Serializer di ObjectMapper

Sekarang, mari kita sederhanakan output JSON di atas dengan hanya membuat serial id dari User , bukan keseluruhan objek User ; kami ingin mendapatkan JSON yang lebih sederhana berikut ini:

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

Sederhananya, kita harus menentukan Serializer khusus untuk objek Item :

public class ItemSerializer extends StdSerializer { public ItemSerializer() { this(null); } public ItemSerializer(Class 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(); } }

Sekarang, kita perlu mendaftarkan serializer khusus ini dengan ObjectMapper untuk kelas Item , dan melakukan serialisasi:

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);

Itu saja - kita sekarang memiliki serialisasi JSON kustom yang lebih sederhana dari entitas Item-> User .

4. Serializer Kustom di Kelas

Kita juga dapat mendaftarkan serializer langsung di kelas , bukan di ObjectMapper :

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

Sekarang, saat melakukan serialisasi standar :

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

Kami akan mendapatkan output JSON khusus, yang dibuat oleh serializer, ditentukan melalui @JsonSerialize :

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

Ini berguna ketika ObjectMapper tidak dapat diakses dan dikonfigurasi secara langsung.

5. Kesimpulan

Artikel ini mengilustrasikan cara mendapatkan keluaran JSON khusus dengan Jackson 2, dengan menggunakan Serializers.

Penerapan semua contoh dan cuplikan kode ini dapat ditemukan di GitHub - ini adalah proyek berbasis Maven, jadi semestinya mudah untuk mengimpor dan menjalankan apa adanya.