Rumah >Java >javaTutorial >Bagaimanakah cara saya menggunakan penyeri bersiri tersuai dengan Jackson?
Untuk menyesuaikan siri kelas Java menggunakan Jackson, seseorang boleh mentakrifkan penyeri tersuai yang memanjangkan JsonSerializer kelas.
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(); } }
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);
3. Serialkan Objek Item:
StringWriter writer = new StringWriter(); mapper.writeValue(writer, myItem);
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.
Pendekatan alternatif ialah menganotasi medan dengan @ JsonSerialize(using = CustomSerializer.class) untuk menggunakan yang khusus serializer.
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); } }
Dan kemudian tambahkan anotasi pada medan:
@JsonSerialize(using = CustomDateSerializer.class) private Date createdAt;
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!