使用@JsonIgnore进行Spring Boot

时间:2016-03-17 18:11:29

标签: java spring-boot jackson

如果我需要忽略一个字段的序列化/反序列化,我将@JsonIgnore放在该字段上:

@JsonIgnore
private String name;

但是,如果我只需要序列化或仅在deserealization中我放入getter或setter方法。

但是可以在某种方法中使用吗?如果我的用户致电:

http://myApp/public/user/1 

我需要忽略属性传递,例如,但如果我的用户调用:

http://myApp/private/user/1 

我不需要忽略属性传递

有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以使用带有FilterProvider

的Json过滤器来实现此目的
  1. 您使用@JsonFilter注释为您的POJO指定过滤器名称。
  2. 在序列化之前,将SimpleBeanPropertyFilter的实例附加到过滤器名称。该类有两种基于属性名称的过滤器工厂方法。
  3. 以下是注释声明的示例:

    @JsonFilter("filterByName")
    public class So {
        public String alwaysWrite = "alwaysWriteValue";
        public String somtimeIgnore = "somtimeIgnoreValue";
    }
    

    这是一个方法,它指定一个忽略somtimeIgnore属性

    的过滤器
    public void dontWriteSomtimes(So so) {
        ObjectMapper mapper = new ObjectMapper();
        FilterProvider filters = new SimpleFilterProvider()  
          .addFilter("filterByName", SimpleBeanPropertyFilter.serializeAllExcept("somtimeIgnore"));  
        ObjectWriter writer = mapper.writer(filters);  
        try {
            System.out.println(writer.writeValueAsString(so));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    输出:
    {"alwaysWrite":"alwaysWriteValue"}

    这是一个写一切的方法:只分配一个不存在的或空的属性:

    public void writeEveryting(So so) {
        ObjectMapper mapper = new ObjectMapper();
        FilterProvider filters = new SimpleFilterProvider()  
          .addFilter("filterByName", SimpleBeanPropertyFilter.serializeAllExcept(""));  
        ObjectWriter writer = mapper.writer(filters);  
        try {
            System.out.println(writer.writeValueAsString(so));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    输出:
    {"alwaysWrite":"alwaysWriteValue","somtimeIgnore":"somtimeIgnoreValue"}