如何在 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.