java - 基于具有字段名称的动态列表对 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 的一些自定义实现,同时序列化请求是可行的方法(如果没有任何其他解决方案也值得赞赏),但我找不到任何好的资源来实现这一点。寻找不会严重影响性能的东西(尽管如果不可能的话,任何事情都会做)。
感谢您对此的任何帮助。
解决方案
推荐阅读
- java - 对敏感数据使用 startActivityForResult() 是否安全?
- ftp - 如何在 Bitbucket Pipelines 中仅通过 atlassian/ftp-deploy:0.2.0 部署更改的文件?
- r - 根据内容删除一行
- java - 可执行 JAR 文件不适合屏幕
- javascript - 用烧瓶后端反应路由器
- php - 无法声明类 ABC,因为该名称已在使用中
- java - 转换为 POJO 列表时,带有连接的查询的结果会丢失顺序
- php - 从 PHP 错误上传 S3 文件:“调用未定义函数 GuzzleHttp\Psr7\hash_init()”
- powershell - 如何显示将超过 1 天的文件从一个文件夹复制到另一个文件夹的进度?
- postgresql - 如果 Node js Express Js Sequelize Postgres 中的偏执为真,需要删除完整的行