java使用条件动态排除Jackson json序列化中的POJO属性
我需要在定义的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
,但无法获得所需的输出。
如果能为实现这一目标提供任何指导,我将非常高兴
# 1 楼答案
我刚看到罪犯。 非常感谢Alexey在这件事上和我在一起。经过多次尝试,我发现Jackson 2.4.2可能要求我将序列化程序放在它可以使用的模型中。我想知道为什么,但可能是由于Java对象序列化要求,Jackson未能在运行时映射过滤器。我希望塔图能在杰克逊的文档中注意到这一点
# 2 楼答案
您应该编写一个自定义Jackson filter,它将根据其他属性值过滤掉POJO属性。您应该重写
PropertyFilter.serializeAsField()
方法来访问序列化对象的实例。以下是一个例子:输出:
# 3 楼答案
我正在使用Jackson 2.4.2
模型对象是:
Myy序列化程序如下所示:
注意:模型类在客户机-服务器体系结构环境中通过网络传递