Java POJO 属性映射
Java POJO attributes mapping
我有一个用例,我在这样的请求中收到了一些属性,
"filters": [
{
"field": "fName",
"value": "Tom"
},
{
"field": "LName",
"value": "Hanks"
}
]
我没有为此定义模型。我只是在请求中收到这些属性,并使用这些属性在弹性搜索上触发查询。我在弹性搜索中的记录具有相同的属性名称。
现在,我必须支持属性名称完全不同的遗留应用程序。
例如:fName 变为 firstName 并且 lName 变为 lastName。
问题:需要在请求中接受旧的属性名称,将它们转换为新的,以便它匹配我的弹性搜索记录。在从应用程序发送响应之前获取具有新属性名称的数据并转换回旧属性名称。
注意:我没有为这些记录定义 POJO。
如何有效地实现这一点?我正在考虑使用 Orika 映射器,但不确定如果不先定义 类 将如何工作。
是什么阻止您将请求 JSON 写入规范化 JSON 的转换器?
我能想到的正常流程是:
Request JSON -> POJO -> POJO with normalized value -> Normalized JSON
因此您的 POJO 看起来像:
public class Filter {
List<FieldFilter> filters;
public static class FieldFilter {
private String field;
private String value;
}
}
现在你将得到一个像这样的转换图:
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
然后你改造你的POJO:
Filter filterRequest;
List<FieldFilters> normlizedFilters =
filterReq.getFilters().stream()
.map(f -> new FieldFilter(fieldNameMapping.get(f.getField()), f.getValue())
.collect(toList());
然后将过滤器 class 转换为您的规范化 JSON。
改用 JSON 至 JSON 转换器。可以在这里找到关于此的好的答案:JSON to JSON transformer and here : XSLT equivalent for JSON
最后你不需要中间对象类型。你还说,你还没有这样的类型,发明它,只是为了改造它,真的没有意义。
我们有类似的场景,我们正在使用apache JOLT.If你想尝试一些示例,你可以参考jolt-demo-online-utility
我有一个用例,我在这样的请求中收到了一些属性,
"filters": [
{
"field": "fName",
"value": "Tom"
},
{
"field": "LName",
"value": "Hanks"
}
]
我没有为此定义模型。我只是在请求中收到这些属性,并使用这些属性在弹性搜索上触发查询。我在弹性搜索中的记录具有相同的属性名称。
现在,我必须支持属性名称完全不同的遗留应用程序。 例如:fName 变为 firstName 并且 lName 变为 lastName。
问题:需要在请求中接受旧的属性名称,将它们转换为新的,以便它匹配我的弹性搜索记录。在从应用程序发送响应之前获取具有新属性名称的数据并转换回旧属性名称。
注意:我没有为这些记录定义 POJO。
如何有效地实现这一点?我正在考虑使用 Orika 映射器,但不确定如果不先定义 类 将如何工作。
是什么阻止您将请求 JSON 写入规范化 JSON 的转换器?
我能想到的正常流程是:
Request JSON -> POJO -> POJO with normalized value -> Normalized JSON
因此您的 POJO 看起来像:
public class Filter {
List<FieldFilter> filters;
public static class FieldFilter {
private String field;
private String value;
}
}
现在你将得到一个像这样的转换图:
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
然后你改造你的POJO:
Filter filterRequest;
List<FieldFilters> normlizedFilters =
filterReq.getFilters().stream()
.map(f -> new FieldFilter(fieldNameMapping.get(f.getField()), f.getValue())
.collect(toList());
然后将过滤器 class 转换为您的规范化 JSON。
改用 JSON 至 JSON 转换器。可以在这里找到关于此的好的答案:JSON to JSON transformer and here : XSLT equivalent for JSON
最后你不需要中间对象类型。你还说,你还没有这样的类型,发明它,只是为了改造它,真的没有意义。
我们有类似的场景,我们正在使用apache JOLT.If你想尝试一些示例,你可以参考jolt-demo-online-utility