gpt4 book ai didi

java - Jackson 不同的 JSONFilter 同一个类

转载 作者:行者123 更新时间:2023-11-30 08:19:02 28 4
gpt4 key购买 nike

我正在尝试使用不同的 JsonFilters 来序列化同一类的对象。

想象类 Foo

public class Foo{
Bar p1;
Bar p2;
}

和类 Bar

@JsonFilter("myFilter")
public class Bar{
String prop1;
String prop2;
String prop3;
}

现在我想要实现的是为类 Foo 中的变量 p1 和 p2 设置不同的 JsonFilters。

例如。对于 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"
}
}

关于java - Jackson 不同的 JSONFilter 同一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27041544/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com