我无法使用带有spring-data jpa的spring-data rest来获取正确的url以显示自我href。
所以我有一个学生班:
@Entity
@Table(name="student", schema="main")
public class Student {
@Id
private Long id;
...
...
@OneToOne
@JoinColumn(name = "id")
private StudentInformation studentInformation;
}
使用相应的存储库文件
@RepositoryRestResource(collectionResourceRel = "students", path = "students")
public interface StudentRepository extends PagingAndSortingRepository<Student, Long> {
}
还有一个StudentInformation类
@Entity
@Table(name="studentinformation", schema="main")
public class StudentInformation {
@Id
private Long id;
...
...
}
(省略其他属性/ getters / setters)
带有相应的存储库
@RepositoryRestResource(collectionResourceRel = "studentinformation", path = "students/studentinformation")
public interface StudentInformationRepository extends CrudRepository<StudentInformation, Long> {
}
当我通过其ID搜索一个时,学生会按照我的预期显示
{
"id": 1,
...
...
"_links": {
"self": {
"href": "http://localhost:8080/students/1"
},
"student": {
"href": "http://localhost:8080/students/1"
},
"studentinformation": {
"href": "http://localhost:8080/students/1/studentinformation"
}
}
}
除非我按照学生链接到studentInformation,否则studentInformation的自我链接不正确。
{
"id": 1,
...
...
"_links": {
"self": {
"href": "http://localhost:8080/students/studentinformation/1"
},
"studentinformation": {
"href": "http://localhost:8080/students/studentinformation/1"
}
}
}
如何获取该链接 &#34; href&#34;:&#34; http://localhost:8080/students/1/studentinformation 代替 &#34; href&#34;:&#34; http://localhost:8080/students/studentinformation/1&#34;
由于
答案 0 :(得分:1)
首先,students/studentinformation
等多段路径可能无法正常工作,因为它不受支持,请参阅this answer,因此请不要专注于设计您的网址。如果您确实需要http://localhost:8080/students/1/studentinformation
代表 - 您需要为此定义一个自定义控制器,而不是依赖Spring Data REST
。
其次,使用projections在/students
端点上拥有不同的学生数据会不会更好?如果它只是Student
资源的不同表示形式,我会选择预测,例如students/1?projection=minimal
和students/1?projection=full
。
如果studentinformation
包含的数据与students
完全不同,而且不是Student
资源的表示,只需为/studentinformation
定义一个端点。