默认情况下,在Spring Data Rest中,不公开实体的@Id。根据REST规则,我们应该使用资源的URI来引用它。根据这个假设,如果你将URI传递给它们,findBy查询应该有效,但它们不会。
例如,说我在师生之间有一对多的关系。我想找老师找学生。
List<Student> findByTeacher(Teacher teacher)
http://localhost:8080/repositories/students/search/findByTeacher?teacher=http://localhost:8080/repositories/teachers/1
这不起作用,因为框架正在尝试将教师URI转换为Long。 我收到此错误,指出“无法从类型java.lang.String转换为类型java.lang.Long”。
我错过了什么吗?
答案 0 :(得分:2)
您可以通过配置web intializer
来公开@Id// Web初始化程序 @组态 公共静态类RespositoryConfig扩展 RepositoryRestMvcConfiguration { @覆盖 protected void configureRepositoryRestConfiguration( RepositoryRestConfiguration config){ config.exposeIdsFor(Teacher.class); } }
将List更改为Page
是件好事列出findByTeacher(教师老师)
到
Page<Student> findByTeacher(@Param("teacher) Teacher teacher, Pageable pageable);
另请注意@Param注释与Pageable一起使用。后者是必需的,因为返回类型“Page”
3.最快的快照,而不是里程碑工作正常
答案 1 :(得分:1)
请参阅https://jira.spring.io/browse/DATAREST-502
根据您的Spring Data版本,它可以根据您的需要而定。如果您使用的是Spring Data 2.4,则需要传递URI。如果您使用的是以前的版本,则需要传递ID。