Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีการใช้ serializer แบบกำหนดเองโดยใช้ไลบรารี Jackson ใน Java?


Jackson API มีหลายวิธีในการทำงานกับข้อมูล JSON โดยใช้ Jackson API เราสามารถแปลงวัตถุ Java เป็นสตริง JSON และปฏิรูปวัตถุจากสตริง JSON เราสามารถใช้ ตัวสร้างซีเรียลไลเซอร์แบบกำหนดเอง โดยใช้ StdSerializer คลาสและจำเป็นต้องแทนที่ serialize(T value, JsonGenerator gen, SerializerProvider provider) วิธีอาร์กิวเมนต์แรก ค่า แสดงถึงค่าที่จะทำให้เป็นอนุกรม (ไม่สามารถเป็นโมฆะได้ ) อาร์กิวเมนต์ที่สอง gen หมายถึงเครื่องกำเนิดที่ใช้ในการส่งออกเนื้อหา Json ที่เป็นผลลัพธ์และอาร์กิวเมนต์ที่สาม ผู้ให้บริการ หมายถึงผู้ให้บริการที่สามารถใช้เพื่อรับซีเรียลไลเซอร์สำหรับการกำหนดค่าอ็อบเจ็กต์ให้เป็นอนุกรม

ไวยากรณ์

public abstract void serialize(T value, JsonGenerator gen, SerializerProvider provider) throws IOException

ตัวอย่าง

import java.io.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.module.*;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
public class JacksonSerializeTest {
   public static void main(String[] args) throws Exception {
      JacksonSerializeTest test = new JacksonSerializeTest();
      test.serialize();
   }
   public void serialize() throws Exception {
      User user = new User();
      user.setFirstName("Raja");
      user.setLastName("Ramesh");
      ObjectMapper mapper = new ObjectMapper();
      SimpleModule module = new SimpleModule();
      module.addSerializer(User.class, new UserSerializer());
      mapper.registerModule(module);

      String jsonStr = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user); // pretty print
      System.out.println(jsonStr);
   }
}
// User class
class User implements Serializable {
   private String firstName;
   private String lastName;
   public String getFirstName() {
      return firstName;
   }
   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }
   public String getLastName() {
      return lastName;
   }
   public void setLastName(String lastName) {
      this.lastName = lastName;
   }
}
// UserSerializer class
class UserSerializer extends StdSerializer<User> {
   public UserSerializer() {
      this(null);
   }
   public UserSerializer(Class<User> t) {
      super(t);
   }
   @Override
   public void serialize(User value, JsonGenerator jgen, SerializerProvider provider) throws       IOException, JsonProcessingException {
      jgen.writeStartObject();
      jgen.writeStringField("firstName", value.getFirstName());
      jgen.writeStringField("lastName", value.getLastName());
      jgen.writeEndObject();
   }
}

ผลลัพธ์

{
 "firstName" : "Raja",
 "lastName" : "Ramesh"
}