我正在使用ORM进行开发,在其中我扩展了基本orm类来创建表。
例如:
public class Person extends DbItem { @JsonIgnore private String index; private String firstName; private String lastName; }
问题是,当我使用ObjectMapper进行序列化时,它将尝试序列化DbItem类的成员。有没有简单的方法可以防止这种情况?例如带有注释。
您可以使用混入或@JsonIgnoreProperties
@JsonIgnoreProperties
就这些示例而言,假定基本的ORM类和扩展名是:
public class DbItem { public String dbPropertyA; public String dbPropertyB; }
和
public class Person extends DbItem { public String index; public String firstName; public String lastName; }
分别。
混合是杰克逊从对象本身理解的反序列化指令的抽象。这是自定义第三方类的反序列化的一种方法。为了定义混入,必须创建一个抽象类并向中注册ObjectMapper。
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); }
如果要避免创建类并配置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); }