【问题标题】:Serializing a POJO based on a runtime whitelist of properties基于属性的运行时白名单序列化 POJO
【发布时间】:2018-03-21 21:04:31
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你可以使用 JSON 过滤器。

标签: java json serialization jackson2


【解决方案1】:

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

【讨论】:

  • 这意味着我必须为每个线程从ObjectMapper 获取一个写入器,添加FilterProvider 然后序列化我的对象图,对吗?这不会增加运行时开销吗?
  • 你可以使用ObjectMapper.setFilterProvider
  • 在可能的情况下使用过滤器对我有用。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多