天天看點

java jackson 自定義_如何使用Java中的Jackson庫實作自定義序列化程式?

在傑克遜API提供了許多方法來用JSON資料的工作。通過使用Jackson API,我們可以将Java對象轉換為JSON字元串,并從JSON字元串重新構造對象。我們可以使用StdSerializer類實作自定義序列化程式,并且需要重寫serialize(T值,JsonGenerator gen,SerializerProvider提供程式)方法,第一個參數值表示要序列化的值(不能為null),第二個參數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);

}

}

//使用者類别

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 UserSerializer extends StdSerializer {

public UserSerializer() {

this(null);

}

public UserSerializer(Class 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"

}