Отображение атрибутов Java POJO
У меня есть прецедент, когда я получаю некоторые атрибуты в запросе вроде этого,
"filters": [
{
"field": "fName",
"value": "Tom"
},
{
"field": "LName",
"value": "Hanks"
}
]
У меня нет модели, определенной для этого. Я просто получаю эти атрибуты в запросе и запускаю запрос об упругом поиске, используя эти атрибуты. Мои записи в упругом поиске имеют одинаковые имена атрибутов.
Теперь я должен поддерживать устаревшее приложение, где имена атрибутов совершенно разные. Например: fName становится firstName и lName становится lastName.
Проблема: необходимо принять старые имена атрибутов в запросе, преобразовать их в новые, чтобы они соответствовали моим данным поиска эластичности. Приобретите данные с новыми именами атрибутов и конвертируйте их обратно в старые, прежде чем отправлять ответ от приложения.
ПРИМЕЧАНИЕ. У меня нет POJO для этих записей.
Как это можно добиться эффективно? Я думал об использовании компоновщика Orika, но не уверен, как это будет работать, не определяя сначала классы.
Ответы
Ответ 1
Что мешает вам написать трансформатор от запроса 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.
Ответ 2
У нас есть аналогичный сценарий, и мы используем apache JOLT. Если вы хотите попробовать несколько образцов, вы можете обратиться к jolt-demo-online-utility
Ответ 3
Вместо этого используйте JSON для JSON-трансформатора. Хорошие ответы на это можно найти здесь: JSON to JSON transformer и здесь: эквивалент XSLT для JSON
В конце вам не нужен тип промежуточного объекта. Вы даже сказали, что у вас еще нет такого типа, и изобретать его, просто чтобы преобразовать его, на самом деле не имеет смысла.