通过《Jackson忽略字段不序列化字段的3种方法》一讲我们知道,JsonIgnore和JsonIgnoreProperties都可以用来忽略掉指定的字段。
这两个注解有个共同点,就是都在添加注解后就指明了需要过滤的字段。如果想要在序列化的时候,才指定需要过滤的字段,那么可以使用JsonFilter注解来实现。
本篇内容基于Jackson 2.11.2版本,马上开始学习吧。
过滤类的字段
为需要过滤字段的类添加JsonFilter注解。
@JsonFilter("myFilter")
public class Animal {
private String name;
private int sex;
private Integer weight;
// 省略getter、setter方法
@Override
public String toString() {
return "Animal [name=" + name + ", sex=" + sex + ", weight=" + weight + "]";
}
}
忽略指定字段
创建一个不序列化sex和weight的过滤器SimpleBeanPropertyFilter,再将这个过滤器和ID为myFilter的注解进行关联,最后将过滤器应用于ObjectMapper。
最终的效果,就是使得被@JsonFilter(“myFilter”)注解的类,在类对象被序列化时,不序列化sex和weight。
/**
* 忽略指定的字段
*
* @throws JsonProcessingException
*/
@Test
public void filterExclude() throws JsonProcessingException {
Animal animal = new Animal();
animal.setName("sam");
animal.setSex(1);
animal.setWeight(100);
ObjectMapper mapper = new ObjectMapper();
// 创建一个不序列化sex和weight的过滤器
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.serializeAllExcept("sex", "weight");
// 将上面的过滤器和ID为myFilter的注解进行关联
FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter", filter);
System.out.print