У меня есть большой граф объектов, из которого я хотел бы представить объекты в RESTful через веб-сервис. Все объекты имеют свойство id, которое служит первичным ключом, уникальным для объектов этого класса. Кроме того, все отношения в моем графе объектов являются двунаправленными. При представлении экземпляра в качестве ресурса REST мне нужно, чтобы все атрибуты экземпляра были записаны в JSON; однако я хочу, чтобы экземпляры, связанные через отношения, просто представлялись их идентификатором, а не сериализовали весь объект в JSON.
Пример: скажем, у Человека есть Собака, а у Собаки есть Человек.
class Person {
private Integer id;
private String firstName;
private String lastName;
private Dog dog;
// public getters/setters omitted
}
class Dog {
private Integer id;
private String name;
private Person owner;
// public getters/setters omitted
}
При сериализации данной собаки мне нужен результат:
{"id": 24, "name": "Fifo", "owner": 42}
И при сериализации данного лица мне нужен результат:
{"id": 42, "firstName": "John", "lastName": "Blogs", "dog": 24}
, а не
{"id": 24, "name": "Fifo", "owner":
{"id": 42, "firstName": "John", "lastName": "Blogs", "dog": 24}
}
и
{"id": 42, "firstName": "John", "lastName": "Blogs", "dog":
{"id": 24, "name": "Fifo", "owner": 42}
}
соответственно. Я поиграл с аннотацией @JsonValue в Джексоне в методе getId (), но, к сожалению, это применимо всегда, независимо от того, был ли объект напрямую сериализован или достигнут ли объект через связь с другим объектом.
Я бы подумал, что этот вариант использования достаточно распространен. Если это невозможно, что делают другие люди, выставляя объекты в графе объектов через RESTful API.
Спасибо.