【发布时间】:2014-09-01 10:17:06
【问题描述】:
我需要动态排除已定义 POJO 列表中的某些属性。 主要要序列化的POJO是:
public class Foo
{
List<Bar> bar;
public void setBar(List<Bar> bar)
{
this.bar = bar;
}
public List<Bar> getBar()
{
return this.bar;
}
public static class Bar
{
private int id;
private boolean ignoreId;
private String name;
public void setId(int id)
{
this.id = id;
}
public int getId()
{
return this.id;
}
public void setIgnoreId(boolean ignoreId)
{
this.ignoreId = ignoreId;
}
public boolean isIgnoreId()
{
return this.ignoreId;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return this.name;
}
}
}
如果ignoreId = true,则忽略id,如下所示:
[
{ "id": "1", "name": "one" },
{ "name": "two" }
{ "name": "three" }
{ "id": "4", "name": "four" }
]
目前,我尝试使用JsonFilter 和JacksonJsonViews,但无法获得所需的输出。
如果可以为实现这一目标提供任何指示,我会很高兴。
【问题讨论】:
-
JsonFilter 应该在这种情况下使用。你能描述一下为什么过滤器不适合你吗?
-
@AlexeyGavrilov,我创建了一个这样的逻辑:
@JsonFilter("Exclude.Id") class PropertyFilterMixIn {}如果我有Set<String> ignorableFieldNames = new ArrayList<String>().add("id");,我可以这样做:FilterProvider filters = new SimpleFilterProvider().addFilter("Exclude.Id", SimpleBeanPropertyFilter.serializeAllExcept(ignorableFieldNames)); ObjectWriter writer = mapper.writer(filters); System.out.println(writer.writeValueAsString(new Foo())); my challenge's to dynamically addid` 到ignorableFieldNames[],如果&仅当ignoreId是真的
标签: java json serialization jackson pojo