Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson不同的JSONFilter相同的类_Java_Json_Jackson - Fatal编程技术网

Java Jackson不同的JSONFilter相同的类

Java Jackson不同的JSONFilter相同的类,java,json,jackson,Java,Json,Jackson,我尝试使用不同的JSonfilter来序列化同一类的对象 想象一下福班 public class Foo{ Bar p1; Bar p2; } 和类酒吧 @JsonFilter("myFilter") public class Bar{ String prop1; String prop2; String prop3; } 现在我想要实现的是为Foo类中的变量p1和p2设置不同的jsonfilter 比如说。对于p1,我只想序列化prop1,对于p2,

我尝试使用不同的JSonfilter来序列化同一类的对象

想象一下福班

public class Foo{
    Bar p1;
    Bar p2;
}
和类酒吧

@JsonFilter("myFilter")
public class Bar{
    String prop1;
    String prop2;
    String prop3;
}
现在我想要实现的是为Foo类中的变量p1和p2设置不同的jsonfilter

比如说。对于p1,我只想序列化prop1,对于p2,我想序列化prop2和prop3。 获取以下json

{
    "p1": { "prop1":"blabla" }
    "p2": { "prop2":"blabla", "prop3":"blabla" }
}
因此,我将使用以下过滤器,以便只有“prop1”将被序列化:

FilterProvider filter = new SimpleFilterProvider().addFilter("myFilter",
    SimpleBeanPropertyFilter.filterOutAllExcept("prop1"));

String json = new ObjectMapper().filteredWriter(filter).writeValueAsString(foo)
但是,使用它也会导致p2被序列化,只有prop1

我想为p2创建另一个过滤器,如下所示:

FilterProvider filter2 = new SimpleFilterProvider().addFilter("myFilter",
    SimpleBeanPropertyFilter.filterOutAllExcept("prop2","prop3"));
但我真的找不到如何实现它,以便p1和p2有不同的过滤器,因为它们属于同一类Foo


谢谢你的阅读,希望有人能帮忙

从Jackson 2.3开始,
@JsonFilter
注释可以放在字段和方法上。我认为这对你的情况应该有帮助。以下是一个例子:

public class JacksonFilters {
    static class Bar {
        final public String prop1;
        final public String prop2;
        final public String prop3;

        Bar(final String prop1, final String prop2, final String prop3) {
            this.prop1 = prop1;
            this.prop2 = prop2;
            this.prop3 = prop3;
        }
    }

    static class Foo {
        @JsonFilter("myFilter1")
        final public Bar p1;
        @JsonFilter("myFilter2")
        final public Bar p2;

        Foo(final Bar p1, final Bar p2) {
            this.p1 = p1;
            this.p2 = p2;
        }
    }

    public static void main(String[] args) throws JsonProcessingException {
        final SimpleFilterProvider filterProvider = new SimpleFilterProvider();
        filterProvider.addFilter("myFilter1",
                SimpleBeanPropertyFilter.filterOutAllExcept("prop1"));
        filterProvider.addFilter("myFilter2",
                SimpleBeanPropertyFilter.serializeAllExcept("prop2"));

        final Foo bar = new Foo(new Bar("a", "b", "c"), new Bar("d", "e", "f"));

        final ObjectMapper mapper = new ObjectMapper();
        mapper.setFilters(filterProvider);
        System.out.println(mapper
                        .writerWithDefaultPrettyPrinter()
                        .writeValueAsString(bar));
    }

}
输出:

{
  "p1" : {
    "prop1" : "a"
  },
  "p2" : {
    "prop1" : "d",
    "prop3" : "f"
  }
}

非常感谢。现在效果很好:D,我尝试用JsonFilter注释一个字段,但没有效果,因为我有一个旧版本的Jackson:z