【发布时间】:2019-01-09 13:43:28
【问题描述】:
我有一个用例,我在这样的请求中收到一些属性,
"filters": [
{
"field": "fName",
"value": "Tom"
},
{
"field": "LName",
"value": "Hanks"
}
]
我没有为此定义模型。我只是在请求中收到这些属性,并使用这些属性对弹性搜索进行查询。我在弹性搜索中的记录具有相同的属性名称。
现在,我必须支持属性名称完全不同的遗留应用程序。 例如:fName 变为 firstName,lName 变为 lastName。
问题:需要在请求中接受旧的属性名称,将它们转换为新的,以便与我的弹性搜索记录匹配。在从应用程序发出响应之前,获取具有新属性名称的数据并转换回旧名称。
注意:我没有为这些记录定义 POJO。
如何有效地实现这一目标?我正在考虑使用 Orika 映射器,但不确定在不先定义类的情况下如何工作。
【问题讨论】:
-
我在两个系统之间同步信息时遇到了类似的问题。它们有非常不同的命名约定,其中一个在过去几年中多次更改命名约定。 (我必须同步所有这些)。我解决这个问题的方法是使用配置文件,将新字段映射到旧字段。当同步请求进来时,我找到了匹配的字段,将其切换到与之配对的字段,然后将其发送出去。对于响应,我使用备用名称再次获取映射并发送响应。也许类似的东西可以提供帮助?
-
当然。我对此并没有太多的研究,但我发现这是最好的解决方案,因为如果他们需要添加/删除字段,我分发应用程序的人可以更改它。我采用的另一种方法(由于编码太硬而放弃了)是编写自定义对象序列化器/反序列化器并通过它运行请求回复。
-
@gkgkgkgk 好的,您有任何可用于配置解决方案的要点或指针吗?
-
是什么阻止您将转换器从请求 JSON 写入规范化 JSON?
-
我也宁愿跳过对象映射并直接将 JSON 映射到规范化 JSON...最后这就是您想要的...您不需要发明没有的类/对象对您有利,另外使用映射实用程序来完成您已经可以通过普通 json 转换完成的工作......也许以下答案对您有帮助:JSON to JSON transformer mentioning also ElasticSearch as use case
标签: java objectmapper orika