Rumah > Java > javaTutorial > Bagaimanakah cara saya menggunakan penyeri bersiri tersuai dengan Jackson?

Bagaimanakah cara saya menggunakan penyeri bersiri tersuai dengan Jackson?

Barbara Streisand
Lepaskan: 2024-11-26 15:42:11
asal
509 orang telah melayarinya

How do I use a custom serializer with Jackson?

Bagaimanakah saya boleh menggunakan Serializer tersuai dengan Jackson?

Konteks

Untuk menyesuaikan siri kelas Java menggunakan Jackson, seseorang boleh mentakrifkan penyeri tersuai yang memanjangkan JsonSerializer kelas.

Pelaksanaan

1. Buat Serializer Tersuai untuk Item:

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.id);
        jgen.writeNumberField("itemNr", value.itemNr);
        jgen.writeNumberField("createdBy", value.createdBy.id);
        jgen.writeEndObject();
    }

}
Salin selepas log masuk

2. Cipta Modul Pensiri Tersuai dan Daftar Pensiri:

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

3. Serialkan Objek Item:

StringWriter writer = new StringWriter();
mapper.writeValue(writer, myItem);
Salin selepas log masuk

Resolusi Isu

Ralat yang dihadapi semasa mendaftarkan serializer tersuai (java.lang.IllegalArgumentException: JsonSerializer of type ... tidak mentakrifkan sah handledType()) menunjukkan bahawa serializer tidak menyatakan jenis yang dikendalikannya.

Untuk menyelesaikan isu ini, pastikan pelaksanaan JsonSerializer mentakrifkan kaedah handledType()nya dengan betul.

Alternatif: Menggunakan Anotasi

Pendekatan alternatif ialah menganotasi medan dengan @ JsonSerialize(using = CustomSerializer.class) untuk menggunakan yang khusus serializer.

Contoh: Menyesuaikan Pensirian Tarikh

Untuk menyesuaikan penyirian tarikh, buat penyiri tersuai yang memanjangkan SerializerBase:

public class CustomDateSerializer extends SerializerBase<Date> {

    public CustomDateSerializer() {
        super(Date.class, true);
    }

    @Override
    public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider)
        throws IOException, JsonProcessingException {
        SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'ZZZ (z)");
        String format = formatter.format(value);
        jgen.writeString(format);
    }

}
Salin selepas log masuk

Dan kemudian tambahkan anotasi pada medan:

@JsonSerialize(using = CustomDateSerializer.class)
private Date createdAt;
Salin selepas log masuk

Ini membenarkan kawalan terperinci ke atas pensirilan dan penyahserikan proses.

Atas ialah kandungan terperinci Bagaimanakah cara saya menggunakan penyeri bersiri tersuai dengan Jackson?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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