Мое решение применимо ко всем запросам, но некоторым оно может показаться уместным.
У меня есть симуляционная ситуация, когда у меня есть ассоциация userPersons, вложенная в мой ответ json User, например:
{
"_embedded":{
"users":[
{
"userName":"Albert"
"userPersons":[
{
"personId":2356,
"activeBoolean":1
},
{
"personId":123617783,
"activeBoolean":1
}
],
"_links":{
"self":{
"href":"http://localhost:8080/api/users/1"
}
}
}
]
}
}
Моя базовая сущность выглядит так:
@Entity
public class User {
...
@Getter @Setter
private String userName;
@Getter @Setter
@OneToMany(mappedBy = "user")
private Set<Userperson> userPersons;
}
И один репозиторий:
@RepositoryRestResource
public interface UserRepo extends JpaRepository<User, Integer> {
}
Мое решение таково:
Просто НЕ раскрывая Userperson @RepositoryRestResource, Spring Data Rest встроит вашу ассоциацию.
Если вы определите @RepositoryRestResource для вложенного типа, Spring Data Rest отобразит ссылку на ресурс, а не встроит его.
Если вам нужен репозиторий вложенных типов для внутренней бизнес-логики, установите для него значение @RepositoryRestResource(exported = false), чтобы иметь такое же поведение.
Чтобы избежать проблемы 1+N, вы можете настроить ассоциацию для быстрой загрузки, возможно, используя @EntityGraph, например этого парня - хотя я еще не нашел лучшего способа реализовать это в Spring Data Rest.
person
radrocket81
schedule
08.06.2017