1.概述
在本文中,我们将学习各种方法来控制一个字段是否被Jackson进行列化/反序列化。
2.public 使字段序列化和反序列化
确保字段可序列化和反序列化的最简单方法是将字段声明为public。
声明EmployeeAccessLevel类,字段包含四种访问权限,如下所示:
public class EmployeeAccessLevel {
private String name;
int age;
protected float salary;
public boolean isLeader;
public EmployeeAccessLevel() {
}
public EmployeeAccessLevel(String name, int age, float salary, boolean isLeader) {
this.name = name;
this.age = age;
this.salary = salary;
this.isLeader = isLeader;
}
// 没有 setters 和 getters 方法
}
在EmployeeAccessLevel类的四个字段中,默认情况下,仅将公共isLeader序列化为JSON:
@Test //根据字段的访问权限,确定序列化那些字段
public void feildAccessLevelsSerializable() throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
EmployeeAccessLevel employee = new EmployeeAccessLevel("Jack", 26, 5000, false);
String valueAsString = mapper.writeValueAsString(employee);
System.out.println(valueAsString);
}
执行上述代码,输出结果为:
{
"isLeader":false}
反序列化代码如下:
@Test //根据字段的访问权限,确定反序列化那些字段
public void feildAccessLevelsDeserializable() throws IOException {
String jsonAsString = "{\"isLeader\":\"true\"}";
ObjectMapper mapper = new ObjectMapper();
EmployeeAccessLevel employeeObject = mapper.readValue(jsonAsString, EmployeeAccessLevel.class);
assertNotNull(employeeObject);
System.out.println(employeeObject);
//EmployeeAccessLevel{name='null', age=0, salary=0.0, isLeader=true}
}
3. Getter使非public 字段序列化和反序列化
另一种使字段(尤其是非public字段)可序列化的方法是为它添加一个getter方法: