如何在 Java 中使用 Jackson 庫實現一個自定義序列化器?\n


 Jackson API 提供了很多方法來處理 JSON 資料。使用 Jackson API,我們可以將 Java 物件轉換為 JSON 字串並從 JSON 字串中重新生成物件。我們可以使用 StdSerializer 類實現一個 自定義序列化器 並需要覆蓋 serialize(T value, JsonGenerator gen, SerializerProvider provider) 方法,第一個引數 value 表示要序列化的值(不可為 null),第二個引數 gen 表示用於輸出生成的 Json 內容的生成器,第三個引數 provider 表示可以用於獲取用於序列化物件的值的序列化器的提供程式。

語法

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

更新日期: 2020 年 7 月 6 日

985 次瀏覽

開啟你的 職業生涯

完成課程認證

開始學習
廣告
© . All rights reserved.