Предположим, что у меня есть следующие сущности JPA:
@Entity
public class Inner {
@Id private Long id;
private String name;
// getters/setters
}
@Entity
public class Outer {
@Id private Long id;
private String name;
@ManyToOne private Inner inner;
// getters/setters
}
Оба Spring и java EE имеют реализации REST с сериализаторами по умолчанию, которые будут маршировать объекты в/из JSON без дальнейшего кодирования. Но при преобразовании Outer
в JSON оба Spring и EE вставляют в него полную копию Inner
:
// Outer
{
"id": "1234",
"name": "MyOuterName",
"inner": {
"id": "4321",
"name": "MyInnerName"
}
}
Это правильное поведение, но проблематично для моих веб-сервисов, поскольку графы объектов могут быть глубокими/сложными и содержать круговые ссылки. Есть ли способ настроить поставляемый маршаллер для маршаллирования POJO/сущностей "мелким" способом вместо того, чтобы не создавать пользовательский сериализатор JSON для каждого из них? Один пользовательский сериализатор, который работает на всех объектах, будет в порядке. В идеале мне бы хотелось что-то вроде этого:
// Outer
{
"id": "1234",
"name": "MyOuterName",
"innerId": "4321"
}
Я также хотел бы, чтобы "unmarshall" JSON вернулся в эквивалентный Java-объект. Бонусы, если решение работает как с Spring, так и с java EE. Спасибо!