jackSon中@JsonFilter注解使用详解

x33g5p2x  于2021-12-25 转载在 其他  
字(1.7k)|赞(0)|评价(0)|浏览(541)

@JsonFilter注解

作用

这个注解的作用是java bean在序列化成json的时候过滤掉指定的属性,即指定的属性不在json中显示,不过这个方法用法比较麻烦,我还是建议用@JsonIgnore这个注解的,功能是差不多的。不过多会一种方法,多一种装逼的姿态的思想下,还是决定看下这个注解的用法。

使用

@JsonFilter("userFilter")  //在这里加注解并且指定过滤器的名称
public class User {

  private String username;
  private String password;
  private Integer age;
}
public static void main(String[] args) throws IOException {
        SimpleFilterProvider filterProvider = new SimpleFilterProvider();
        filterProvider.addFilter("userFilter",   //添加过滤器名称
                SimpleBeanPropertyFilter.serializeAllExcept("username", "password")); //这里指定不序列化的属性
/* Set exclude = new HashSet(); exclude.add("username"); exclude.add("password"); filterProvider.addFilter("userFilter", SimpleBeanPropertyFilter.serializeAllExcept(exclude)); //这里指定不序列化的属性也可以放到Set集合里面 filterProvider.addFilter("userFilter", SimpleBeanPropertyFilter.serializeAll()); // serializeAll()序列化所有属性, filterProvider.addFilter("userFilter", SimpleBeanPropertyFilter.filterOutAllExcept("age")); //只序列化这里包含的属性*/
        ObjectMapper mapper = new ObjectMapper();
        mapper.setFilterProvider(filterProvider);
        User user = new User();
        user.setUsername("小明");
        user.setPassword("123");
        user.setAge(18);
        String s = mapper.writer().withDefaultPrettyPrinter().writeValueAsString(user);
        System.out.println("我是序列化" + s);
        User user1 = mapper.readValue("{\"username\":\"小明\",\"password\":\"123\",\"age\":18}", User.class);
        System.out.println("我是反序列化" + user1);  //这里注意只是在序列化的时候过滤字段,在反序列化的时候是不过滤的
    }

下面是输出

我是序列化{
  "age" : 18
}
我是反序列化User{username='小明', password='123', age=18}

当然这个注解也可以加在字段上面,用法是一样的,感兴趣的自己去测试下。

相关文章