Jackson
Jackson是一个开源的Java序列化和反序列化工具,可以将Java对象序列化为XML或JSON格式的字符串,以及将XML或JSON格式的字符串反序列化为Java对象。由于其使用简单,速度较快,且不依靠除JDK外的其他库,被众多用户所使用。
依赖
com.fasterxml.jackson.core jackson-databind 2.7.9 com.fasterxml.jackson.core jackson-core 2.7.9 com.fasterxml.jackson.core jackson-annotations 2.7.9 # Jackson序列化与反序列化 Jackson提供了ObjectMapper.writeValueAsString()和ObjectMapper.readValue()两个方法来实现序列化和反序列化的功能。POJO
package Jackson;
public class User {
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
}
测试
public class JacksonTest {
public static void main(String[] args) throws IOException {
User user = new User(“Sentiment”,“123456”);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
System.out.println(json);
User other = mapper.readValue(json,User.class);
System.out.println(other);
}
}
结果
{“username”:“Sentiment”,“password”:“123456”}
Jackson.User@67b6d4ae
多态问题
和fastjson的一样,需要解决多态的问题,比如:Apple是苹果还是苹果手机等,在fastjson中引入了@type字段来解决该问题
而在Jackson中也有与之对应的方法,Jackson实现了JacksonPolymorphicDeserialization机制来解决这个问题,有两种方法:DefaultTyping和@JsonTypeInfo注解。
DefaultTyping
Jackson提供一个enableDefaultTyping设置,其包含4个值,在com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping能看到
JAVA_LANG_OBJECT
OBJECT_AND_NON_CONCRETE
NON_CONCRETE_AND_ARRAYS
NON_FINAL
默认情况下,即无参数的enableDefault