jackSon中@JsonFilter注解使用详解

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

@JsonFilter注解

作用

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

使用

  1. @JsonFilter("userFilter") //在这里加注解并且指定过滤器的名称
  2. public class User {
  3. private String username;
  4. private String password;
  5. private Integer age;
  6. }
  1. public static void main(String[] args) throws IOException {
  2. SimpleFilterProvider filterProvider = new SimpleFilterProvider();
  3. filterProvider.addFilter("userFilter", //添加过滤器名称
  4. SimpleBeanPropertyFilter.serializeAllExcept("username", "password")); //这里指定不序列化的属性
  5. /* 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")); //只序列化这里包含的属性*/
  6. ObjectMapper mapper = new ObjectMapper();
  7. mapper.setFilterProvider(filterProvider);
  8. User user = new User();
  9. user.setUsername("小明");
  10. user.setPassword("123");
  11. user.setAge(18);
  12. String s = mapper.writer().withDefaultPrettyPrinter().writeValueAsString(user);
  13. System.out.println("我是序列化" + s);
  14. User user1 = mapper.readValue("{\"username\":\"小明\",\"password\":\"123\",\"age\":18}", User.class);
  15. System.out.println("我是反序列化" + user1); //这里注意只是在序列化的时候过滤字段,在反序列化的时候是不过滤的
  16. }

下面是输出

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

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

相关文章