Computer >> Máy Tính >  >> Lập trình >> Java

Làm thế nào để triển khai một bộ tuần tự tùy chỉnh bằng cách sử dụng thư viện Jackson trong Java?


API Jackson cung cấp một số phương pháp để làm việc với dữ liệu JSON. Bằng cách sử dụng API Jackson, chúng ta có thể chuyển đổi các đối tượng Java sang chuỗi JSON và cải cách đối tượng từ chuỗi JSON. Chúng tôi có thể triển khai bộ nối tiếp tùy chỉnh bằng cách sử dụng StdSerializer và cần ghi đè serialize (giá trị T, gen JsonGenerator, nhà cung cấp SerializerProvider) phương thức, đối số đầu tiên giá trị đại diện cho giá trị để tuần tự hóa ( không được rỗng ), đối số thứ hai gen đại diện cho trình tạo được sử dụng để xuất nội dung Json kết quả và đối số thứ ba nhà cung cấp đại diện cho trình cung cấp có thể được sử dụng để lấy bộ tuần tự hóa để tuần tự hóa giá trị đối tượng.

Cú pháp

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

Ví dụ

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

Đầu ra

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