Java POJO属性映射

时间:2018-08-01 21:32:58

标签: java objectmapper orika

我有一个用例,我在请求中收到了一些这样的属性,

"filters": [
  {
    "field": "fName",
    "value": "Tom"
  },
  {
    "field": "LName",
    "value": "Hanks"
  }
]

我没有为此定义模型。我只是在请求中收到这些属性,然后使用这些属性在弹性搜索上触发查询。我在弹性搜索中的记录具有相同的属性名称。

现在,我必须支持一个属性名称完全不同的旧版应用程序。 例如: fName 变为名字,而 lName 变为 lastName

问题::需要在请求中接受旧的属性名称,然后将其转换为新的属性名称,以便与我的弹性搜索记录匹配。在使用应用程序发送响应之前,使用新的属性名称获取数据并转换回旧的属性名称。

注意::我没有为这些记录定义POJO。

如何有效地做到这一点?我当时在考虑使用Orika映射器,但不确定在不先定义类的情况下该如何工作。

3 个答案:

答案 0 :(得分:4)

是什么阻止您编写从请求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());

然后将Filter类转换为标准化的JSON。

答案 1 :(得分:3)

我们有一个类似的场景,我们正在使用apache JOLT。如果您想尝试一些示例,可以参考jolt-demo-online-utility

答案 2 :(得分:0)

改为使用JSON到JSON-transformer。可以在以下位置找到有关此问题的良好答案:JSON to JSON transformer和此处:XSLT equivalent for JSON

最后,您在这里不需要中间对象类型。您甚至说过,您还没有这样的类型,而发明它,仅仅为了对其进行转换,就没有任何意义。

相关问题