Use*_*911 15 java orika objectmapper
我有一个用例,我在请求中收到一些属性,如下所示,
"filters": [
{
"field": "fName",
"value": "Tom"
},
{
"field": "LName",
"value": "Hanks"
}
]
Run Code Online (Sandbox Code Playgroud)
我没有为此定义模型.我只是在请求中收到这些属性,并使用这些属性触发弹性搜索查询.我在弹性搜索中的记录具有相同的属性名称.
现在,我必须支持遗产应用程序,其中属性的名称完全不同.例如:fName变为firstName,lName变为lastName.
问题:需要在请求中接受旧的属性名称,将它们转换为新的属性名称,以便它与我的弹性搜索记录匹配.获取具有新属性名称的数据,并在从应用程序发出响应之前转换回旧属性.
注意:我没有为这些记录定义POJO.
如何有效实现这一目标?我正在考虑使用Orika mapper,但不确定如果不首先定义类,它将如何工作.
是什么阻止您编写从请求 JSON 到规范化 JSON 的转换器?
我能想到的正常流程是:
Request JSON -> POJO -> POJO with normalized value -> Normalized JSON
Run Code Online (Sandbox Code Playgroud)
所以你的 POJO 看起来像:
public class Filter {
List<FieldFilter> filters;
public static class FieldFilter {
private String field;
private String value;
}
}
Run Code Online (Sandbox Code Playgroud)
现在您将拥有一个如下所示的转换图:
Map<String, String> fieldNameMapping = new HashMap<>();
fieldNameMapping.put("fName", "firstName");
fieldNameMapping.put("firstName", "firstName");
// The process of populating this map can be done either by a static initializer, or config/properties reader
Run Code Online (Sandbox Code Playgroud)
然后你改造你的 POJO:
Filter filterRequest;
List<FieldFilters> normlizedFilters =
filterReq.getFilters().stream()
.map(f -> new FieldFilter(fieldNameMapping.get(f.getField()), f.getValue())
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
然后将 Filter 类转换为标准化 JSON。
| 归档时间: |
|
| 查看次数: |
806 次 |
| 最近记录: |