У меня есть простой сценарий, в котором есть связь между Пользователь и Умение , означает, что у одного пользователя много навыков, поэтому я попробовал:
Пользователь
@Data
@NoArgsConstructor
@Entity
@EqualsAndHashCode
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
@OneToMany(mappedBy = "user")
private List<Skill> skills;
}
Skill
@Data
@NoArgsConstructor
@Entity
@EqualsAndHashCode
public class Skill {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String skillTitle;
@ManyToOne
@JoinColumn(name="user_id")
private User user;
}
UserRepository
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
List<User> findByName(@Param("name") String name);
}
SkillRepository
@RepositoryRestResource(collectionResourceRel = "skills", path = "skills")
public interface SkillRepository extends CrudRepository<Skill, Long>{
}
со всем выше, я могу получить ответ, например, по URL http://localhost:8085/users/1
{
"name": "Root",
"_links": {
"self": {
"href": "http://localhost:8085/users/1"
},
"user": {
"href": "http://localhost:8085/users/1"
},
"skills": {
"href": "http://localhost:8085/users/1/skills"
}
}
}
не проблема в том, что я не понимаю, почему список навыков не выбирается, почему только этот список
"skills": {
"href": "http://localhost:8085/users/1/skills"
}
не полный список связанных навыковдо user/1
.
ОБНОВЛЕНИЕ
Добавлена проекция в соответствии с предложением: UserProjection.java
@Projection(name = "inlineData", types=User.class)
public interface UserProjection {
String getName();
List<Skill> getSkills();
}
UserRepository.java is
@RepositoryRestResource(collectionResourceRel = "users", path = "users", excerptProjection = UserProjection.class)
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
List<User> findByName(@Param("name") String name);
}
ответ:
{
"name": "Root",
"_links": {
"self": {
"href": "http://localhost:8085/users/1"
},
"user": {
"href": "http://localhost:8085/users/1{?projection}",
"templated": true
},
"skills": {
"href": "http://localhost:8085/users/1/skills"
}
}
}