簡體   English   中英

Java POJO屬性映射

[英]Java POJO attributes mapping

我有一個用例,我在請求中收到一些屬性,如下所示,

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

我沒有為此定義模型。 我只是在請求中收到這些屬性,並使用這些屬性觸發彈性搜索查詢。 我在彈性搜索中的記錄具有相同的屬性名稱。

現在,我必須支持遺產應用程序,其中屬性的名稱完全不同。 例如: fName變為firstNamelName變為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM