Частичная сериализация JSON во время выполнения (для запросов RESTful)

Я пытаюсь преобразовать объект Java в JSON в Tomcat (в настоящее время использующий Джексона). Основываясь на полях в запросе RESTful, я хочу сериализовать только эти поля. Я хочу поддержать запросы для любого подмножества полей, поэтому я Я хотел бы сделать это во время выполнения (динамически).

Например, предположим, что я хочу поддержать частичную сериализацию для объектов User:

class User {
    private final String id;
    private final String firstName;
    private final String lastName;

    public User(String id, String firstName, String lastName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getId() { return id; }
    public String getFirstName() { return firstName; }
    public String getLastName() { return lastName; }
}

Если я сделаю запрос для:

GET /users/{id}/?fields=firstName,lastName

Я хочу получить что-то вроде {"firstName": "Jack", "lastName": "Johnson"} .

Если я сделаю запрос:

GET /users/{id}/?fields=firstName

я хочу получить что-то вроде {"firstName": «Джек»} .

JSON View Джексона дает возможность определять подмножества логических свойств (вещей, доступ к которым осуществляется через геттеры или поля) для сериализации. Однако они определяются статически (с использованием аннотаций) и выбираются только динамически (для сериализации). На практике я хочу поддержать запрос любого подмножества полей объекта, чтобы потенциально иметь тысячи представлений JSON (10 полей подразумевают 1023 подмножества!).

Какая библиотека JSON поддерживает частичную сериализацию во время выполнения?

13
задан Action Jackson 23 August 2010 в 18:13
поделиться

1 ответ

Я думаю, что json-lib и flex-json поддерживают более динамическую / гибкую фильтрацию.

Что касается Джексона, то некоторые пользователи используют HashMaps или JsonNodes как более свободные структуры и оттуда выполняют фильтрацию.

Кроме того, хотя это не поможет вам в краткосрочной перспективе, в Jackson 1.6 есть улучшения для JsonNode (keepAll (String ... names), remove (String ... names) и, возможно, ObjectMapper, поскольку это известный область для улучшений.

0
ответ дан 2 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: