[英]Java POJO attributes mapping
我有一個用例,我在請求中收到一些屬性,如下所示,
"filters": [
{
"field": "fName",
"value": "Tom"
},
{
"field": "LName",
"value": "Hanks"
}
]
我沒有為此定義模型。 我只是在請求中收到這些屬性,並使用這些屬性觸發彈性搜索查詢。 我在彈性搜索中的記錄具有相同的屬性名稱。
現在,我必須支持遺產應用程序,其中屬性的名稱完全不同。 例如: fName變為firstName , lName變為lastName 。
問題:需要在請求中接受舊的屬性名稱,將它們轉換為新的屬性名稱,以便它與我的彈性搜索記錄匹配。 獲取具有新屬性名稱的數據,並在從應用程序發出響應之前轉換回舊屬性。
注意:我沒有為這些記錄定義POJO。
如何有效實現這一目標? 我正在考慮使用Orika mapper,但不確定如果不首先定義類,它將如何工作。
是什么阻止您將請求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。
我們有一個類似的場景,我們正在使用apache JOLT。如果你想嘗試一些示例,你可以參考jolt-demo-online-utility
改為使用JSON到JSON變換器。 關於這一點的好答案可以在這里找到: JSON到JSON轉換器 ,這里: JSON的XSLT等價物
最后,您不需要中間對象類型。 你甚至說過,你還沒有這樣的類型並發明它,只是為了改造它,並沒有真正意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.