Я пытаюсь найти решение проблемы, связанной с сериализацией объектов Java с выбранными полями на основе отдельного списка «Поля для включения». Например, у меня есть класс объектов Java следующим образом:
@Data
public class ModelA implements Serializable {
private String fieldAA;
private String fieldAB;
private ModelB fieldAC;
private ModelC fieldAD;
}
@Data
public class ModelB implements Serializable {
private String fieldBA;
private String fieldBB;
private String fieldBC;
}
@Data
public class ModelC implements Serializable {
private String fieldCA;
private String fieldCB;
}
И список "Полей для включения" - Список<String> как ["fieldAA", "fieldBA", "fieldBB", "fieldCB"], я хочу, чтобы ModelA включал только поля из этого списка и игнорировать остальные, например:
{
"fieldAA": "Value 1",
"fieldAC": {
"fieldBA": "Value 2",
"fieldBB": "Value 3"
},
"fieldAD": {
"fieldCB": "Value 4"
}
}
Дело в том, что динамический список включаемых полей может меняться от запроса к запросу, и я хочу сериализовать только те поля, которые присутствуют в этом списке. На данный момент вы можете предположить, что существует конечное множество запросов, требующих заданного набора ответов, но их количество все еще достаточно велико (предположим, > 50), чтобы создавать разные объекты передачи данных для каждого, когда большинство из них логически делят несколько полей как они ссылаются на аналогичные данные. (Говоря это на случай, если возможен какой-то пул сериализаторов)
Я не хочу аннотировать/изменять модификаторы полей в классе модели, поскольку любое поле в классе может быть сериализовано для одного запроса, а не для другого, поэтому в некотором смысле каждое поле важно как минимум для один запрос.
Я понимаю, что некоторая пользовательская реализация ObjectMapper или Gson Джексона, в то время как сериализация запроса - это путь (если не любое другое решение, также приветствуется), но я не могу найти никаких хороших ресурсов для достижения этого. Ищите что-то, что не сильно влияет на производительность (хотя подойдет что угодно, если это невозможно).
Будем признательны за любую помощь в этом.
В Гсоне такого нет. Самый простой, но не самый эффективный способ сделать это — сериализовать модели в промежуточное дерево JSON и позволить ему сохранить только нужные поля, удалив остальные. Манипулировать деревом JSON довольно просто, и его можно легко согласовать со списком, который вы упоминаете.
Есть ли какая-нибудь другая библиотека, которая может помочь с этим, кроме GSON? @пушистый
Нет подсказки. Вы пытались применить обходной путь, который я предлагал?