Jackson反序列化方法

文章介绍了Jackson库在Java中进行对象序列化和反序列化的过程,包括ObjectMapper的使用方法,如何处理多态问题,以及DefaultTyping和@JsonTypeInfo注解在解决类型识别上的应用。同时提到了Jackson反序列化可能导致的安全漏洞,尤其是在使用默认类型设定或特定注解时。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值