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

Serializing a POJO based on a runtime whitelist of properties

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

目前我所知道的所有解决方案(视图、@JsonIgnoreProperties 等)都是静态的编译时解决方案。

此外,我的后端 returns 结果格式如下:

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

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

您可能想看看 @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