出于这些示例的目的,假定基本 ORM 类和扩展为:
public class DbItem {
public String dbPropertyA;
public String dbPropertyB;
}
和
public class Person extends DbItem {
public String index;
public String firstName;
public String lastName;
}
分别。
使用混音
混音是 Jackson 从对象本身理解的去序列化指令的抽象。这是一种自定义第三方类的反序列化的方法。为了定义 Mix-in,必须创建一个抽象类并将其注册到 .ObjectMapper
示例混入定义
public abstract class PersonMixIn {
@JsonIgnore public String dbPropertyA;
@JsonIgnore public String dbPropertyB;
@JsonIgnore public String index;
}
注册混音
@Test
public void serializePersonWithMixIn() throws JsonProcessingException {
// set up test data including parent properties
Person person = makeFakePerson();
// register the mix in
ObjectMapper om = new ObjectMapper()
.addMixIn(Person.class, PersonMixIn.class);
// translate object to JSON string using Jackson
String json = om.writeValueAsString(person);
assertFalse(json.contains("dbPropertyA"));
assertFalse(json.contains("dbPropertyB"));
assertFalse(json.contains("index"));
System.out.println(json);
}
@JsonIgnoreProperties
如果要避免创建类并配置 ,则可以使用注释。只需对要序列化的类进行批注,并列出要排除的属性。ObjectMapper
@JsonIgnoreProperties
示例 可序列化对象
@JsonIgnoreProperties({"index", "dbPropertyA", "dbPropertyB"})
public class Person extends DbItem {
public String index;
public String firstName;
public String lastName;
}
查看实际应用
@Test
public void serializePersonWithIgnorePropertiesAnnotation() throws JsonProcessingException {
// set up test data including parent properties
Person person = makeFakePerson();
ObjectMapper om = new ObjectMapper();
// translate object to JSON string using Jackson
String json = om.writeValueAsString(person);
assertFalse(json.contains("dbPropertyA"));
assertFalse(json.contains("dbPropertyB"));
assertFalse(json.contains("index"));
System.out.println(json);
}