Я пытаюсь преобразовать объект 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 поддерживает частичную сериализацию во время выполнения?
Я думаю, что json-lib и flex-json поддерживают более динамическую / гибкую фильтрацию.
Что касается Джексона, то некоторые пользователи используют HashMaps или JsonNodes как более свободные структуры и оттуда выполняют фильтрацию.
Кроме того, хотя это не поможет вам в краткосрочной перспективе, в Jackson 1.6 есть улучшения для JsonNode (keepAll (String ... names), remove (String ... names) и, возможно, ObjectMapper, поскольку это известный область для улучшений.