sim*_*nes 8 java inheritance json jackson
我正在使用ORM进行开发,我扩展了一个基础orm类来创建表.
例如:
public class Person extends DbItem {
@JsonIgnore
private String index;
private String firstName;
private String lastName;
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我使用ObjectMapper进行序列化时,它会尝试序列化DbItem类的成员.有没有简单的方法来防止这种情况?例如,带注释.
我看了一下类似的问题杰克逊序列化:如何忽略超类属性,但我希望它可以做得更简单,我不确定我是否可以这样做因为我不能改变超类,因为它是在一个外部图书馆.
Sam*_*rry 11
@JsonIgnoreProperties出于这些示例的目的,假定基本ORM类和扩展名为:
public class DbItem {
public String dbPropertyA;
public String dbPropertyB;
}
Run Code Online (Sandbox Code Playgroud)
和
public class Person extends DbItem {
public String index;
public String firstName;
public String lastName;
}
Run Code Online (Sandbox Code Playgroud)
分别.
混合是杰克逊从对象本身理解的de /序列化指令的抽象.这是一种自定义第三方类的序列化的方法.为了定义一个混合,必须创建一个抽象类并在其中注册ObjectMapper.
public abstract class PersonMixIn {
@JsonIgnore public String dbPropertyA;
@JsonIgnore public String dbPropertyB;
@JsonIgnore public String index;
}
Run Code Online (Sandbox Code Playgroud)
@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);
}
Run Code Online (Sandbox Code Playgroud)
@JsonIgnoreProperties如果要避免创建类并配置ObjectMapper,@JsonIgnoreProperties可以使用注释.只需注释要序列化的类,并列出要排除的属性.
@JsonIgnoreProperties({"index", "dbPropertyA", "dbPropertyB"})
public class Person extends DbItem {
public String index;
public String firstName;
public String lastName;
}
Run Code Online (Sandbox Code Playgroud)
@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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12465 次 |
| 最近记录: |