在傑克遜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"
}