Динамическая сериализация выбранных полей для объектов Java на основе динамического списка с именами полей

avatar
Parth Prajapati
9 августа 2021 в 06:35
154
0
0

Я пытаюсь найти решение проблемы, связанной с сериализацией объектов 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 Джексона, в то время как сериализация запроса - это путь (если не любое другое решение, также приветствуется), но я не могу найти никаких хороших ресурсов для достижения этого. Ищите что-то, что не сильно влияет на производительность (хотя подойдет что угодно, если это невозможно).

Будем признательны за любую помощь в этом.

Источник
terrorrussia-keeps-killing
9 августа 2021 в 09:55
0

В Гсоне такого нет. Самый простой, но не самый эффективный способ сделать это — сериализовать модели в промежуточное дерево JSON и позволить ему сохранить только нужные поля, удалив остальные. Манипулировать деревом JSON довольно просто, и его можно легко согласовать со списком, который вы упоминаете.

Parth Prajapati
11 августа 2021 в 10:59
0

Есть ли какая-нибудь другая библиотека, которая может помочь с этим, кроме GSON? @пушистый

terrorrussia-keeps-killing
12 августа 2021 в 22:56
0

Нет подсказки. Вы пытались применить обходной путь, который я предлагал?

Ответы (0)