首页 > 解决方案 > 基于具有字段名称的动态列表对 java 对象的选定字段进行动态序列化

问题描述

我正在尝试找到一个问题的解决方案,其中我想基于单独的“要包含的字段”列表使用选定的字段序列化 java 对象。例如我有一个java对象类如下:

@Data
public class ModelA implements Serializable {
    private String fieldAA;
    private String fieldAB;
    private ModelB fieldAC;
    private ModelC fieldAD;
}

@Data
public class ModelB implements Serializable {
    private String fieldBA;
    private String fieldBB;
    private String fieldBC;
}

@Data
public class ModelC implements Serializable {
    private String fieldCA;
    private String fieldCB;
}

以及“要包含的字段”列表 - List<String> as ["fieldAA", "fieldBA", "fieldBB", "fieldCB"],我想将 ModelA 序列化为仅包含此列表中的字段并忽略其余部分,例如:

{
    "fieldAA": "Value 1",
    "fieldAC": {
        "fieldBA": "Value 2",
        "fieldBB": "Value 3"
    },
    "fieldAD": {
        "fieldCB": "Value 4"
    }
}

问题是,要包含的字段的动态列表可以根据请求更改,我只想序列化此列表中存在的字段。您现在可以假设有一组有限的请求需要一组给定的响应,但是当它们中的大多数在逻辑上共享多个字段时,它们的数量仍然很大(假设 > 50)以便为每个请求创建不同的数据传输对象他们引用了类似的数据。(这样说是为了防止某种序列化程序池是可能的)

不想注释/更改模型类中字段的修饰符,因为类中的任何字段都可以为一个请求序列化,而不是为另一个请求序列化,因此在某种程度上,每个字段对于至少一个请求都很重要。

我了解 Jackson 的 ObjectMapper 或 Gson 的一些自定义实现,同时序列化请求是可行的方法(如果没有任何其他解决方案也值得赞赏),但我找不到任何好的资源来实现这一点。寻找不会严重影响性能的东西(尽管如果不可能的话,任何事情都会做)。

感谢您对此的任何帮助。

标签: javaserializationjava-8jacksongson

解决方案


推荐阅读