Rumah > Java > javaTutorial > Bagaimana untuk Melaksanakan Pensiri Tersuai dengan Betul dengan `handledType()` dan `serialize()` Jackson?

Bagaimana untuk Melaksanakan Pensiri Tersuai dengan Betul dengan `handledType()` dan `serialize()` Jackson?

Susan Sarandon
Lepaskan: 2024-11-24 15:21:17
asal
342 orang telah melayarinya

How to Properly Implement Custom Serializers with Jackson's `handledType()` and `serialize()`?

Menggunakan Serializer Tersuai dengan Jackson

Dalam kod anda, anda menerima IllegalArgumentException kerana JsonSerializer memerlukan kaedah handledType() untuk menentukan jenisnya pemegang. Begini cara untuk melaksanakannya dengan betul menggunakan handledType() dan serialize():

public class ItemSerializer extends JsonSerializer<Item> {

  @Override
  public void serialize(Item value, JsonGenerator jgen,
                        SerializerProvider provider) throws IOException,
                                                       JsonProcessingException {
    jgen.writeStartObject();
    jgen.writeNumberField("id", value.getId());
    jgen.writeNumberField("itemNr", value.getItemNr());
    jgen.writeNumberField("createdBy", value.getCreatedBy().getId());
    jgen.writeEndObject();
  }

  @Override
  public Class<Item> handledType() {
    return Item.class;
  }
}
Salin selepas log masuk

Menyepadukan dengan Jackson:

Selepas menentukan penyeri tersuai, anda perlu menyepadukan itu dengan Jackson. Ini boleh dicapai menggunakan SimpleModule:

ObjectMapper mapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule("SimpleModule",
                                              new Version(1,0,0,null));
simpleModule.addSerializer(new ItemSerializer());
mapper.registerModule(simpleModule);
Salin selepas log masuk

Sekarang, anda boleh menggunakan pemeta tersuai untuk mensiri objek Item.

Menyerikan Objek Pengguna:

Untuk menyerikan objek Pengguna dengan format tersuai, anda boleh menentukan objek yang berasingan serializer:

public class UserSerializer extends JsonSerializer<User> {

  @Override
  public void serialize(User value, JsonGenerator jgen,
                        SerializerProvider provider) throws IOException,
                                                       JsonProcessingException {
    jgen.writeStartObject();
    jgen.writeNumberField("id", value.getId());
    jgen.writeEndObject();
  }

  @Override
  public Class<User> handledType() {
    return User.class;
  }
}
Salin selepas log masuk

Jangan lupa untuk menyepadukannya dengan Jackson:

simpleModule.addSerializer(new UserSerializer());
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pensiri Tersuai dengan Betul dengan `handledType()` dan `serialize()` Jackson?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan