findBy URI在Spring Data Rest中不起作用

时间:2014-01-21 20:09:33

标签: spring-data-rest

默认情况下,在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”。

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

  1. 您可以通过配置web intializer

    来公开@Id

    // Web初始化程序 @组态 公共静态类RespositoryConfig扩展             RepositoryRestMvcConfiguration {     @覆盖     protected void configureRepositoryRestConfiguration(                     RepositoryRestConfiguration config){                 config.exposeIdsFor(Teacher.class);     } }

  2. 将List更改为Page

    是件好事

    列出findByTeacher(教师老师)

  3. 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。