基于属性的运行时白名单序列化POJO

时间:2017-10-10 12:39:18

标签: java json serialization jackson2

是否可以使用Jackson序列化POJO属性的白名单子集(白名单仅在运行时知道)?

到目前为止我所知道的所有解决方案(Views,@JsonIgnoreProperties等)都是静态的编译时解决方案。

此外,我的后端以下列格式返回结果:

{
    "outcome": "SUCCESS", // an enum
    "message": "Success.", // a message for the developer
    "result": {
        // Some result that's different for each call
    }
}

所以我正在寻找一种只能应用于对象图部分的解决方案(如result属性的内容)。

1 个答案:

答案 0 :(得分:2)

您可能希望查看@JsonFilter

请参阅serializing only fields that meet some criteria上的本教程,其中包含详细信息以及其他几种方法。

完整性

@JsonFilter("pojo-filter")
class Pojo {
    public int foo;
}

FilterProvider filters = new SimpleFilterProvider()
    .addFilter("pojo-filter", new SimpleBeanPropertyFilter() {
        @Override
        protected boolean include(PropertyWriter writer) {
            return "foo".equals(writer.getName()) 
                ? Random.nextBoolean()
                : true;
        }
    });

new ObjectMapper().writer().filters(filters).write(new Pojo());

在全球范围内,您可以使用ObjectMapper.setFilterProvider