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
Susan Sarandonasal
2024-11-24 15:21:17333semak imbas

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

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

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

Jangan lupa untuk menyepadukannya dengan Jackson:

simpleModule.addSerializer(new UserSerializer());

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:
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