Spring-data-rest "Failed to convert" 实体的有效 hateoas URI
Spring-data-rest "Failed to convert" valid hateoas URI to Entity
我们正在使用 spring-data-rest 2.6.8 和 spring-boot 1.5.8,这太棒了!尽管如此,我们还是发现了一些奇怪的行为。
当我们对 /rest/students/search/findByTeacher?teacher=/rest/teachers/1
执行 GET 操作时,一切运行顺利。 SDR 将教师 URI 转换为教师实体,我们得到学生列表。
当我们提供不同的 URI(解析为同一对象)时,系统无法进行转换:/rest/students/search/findByTeacher?teacher=/rest/class/2/teacher
目前我们分两步进行。首先我们获取 /rest/class/2/teacher
,然后我们使用 _links.self.href
(/rest/teachers/1) 进行搜索。
有没有办法配置 SDR 来避免这个两步过程?
我认为这是不可能的。 Spring 解析 link 时的 Data Rest 工作方式基本上是获取 url,从开头删除 baseUri,然后它尝试匹配 [=19= 的下一部分] 到存储库 {teachers},然后使用 findOne 方法查询存储库。在这种情况下,url /rest/teachers/1
只是资源的标识符(没有 hateoas 就像 teacherID=1)
查询 /rest/class/2/teacher
的问题是您不知道它将解析什么 - 它可能是单个元素,它可能是一个列表,它可能是一个 null 等等,因为这不是资源的标识符,但 link 是另一个资源的标识符。
我们正在使用 spring-data-rest 2.6.8 和 spring-boot 1.5.8,这太棒了!尽管如此,我们还是发现了一些奇怪的行为。
当我们对 /rest/students/search/findByTeacher?teacher=/rest/teachers/1
执行 GET 操作时,一切运行顺利。 SDR 将教师 URI 转换为教师实体,我们得到学生列表。
当我们提供不同的 URI(解析为同一对象)时,系统无法进行转换:/rest/students/search/findByTeacher?teacher=/rest/class/2/teacher
目前我们分两步进行。首先我们获取 /rest/class/2/teacher
,然后我们使用 _links.self.href
(/rest/teachers/1) 进行搜索。
有没有办法配置 SDR 来避免这个两步过程?
我认为这是不可能的。 Spring 解析 link 时的 Data Rest 工作方式基本上是获取 url,从开头删除 baseUri,然后它尝试匹配 [=19= 的下一部分] 到存储库 {teachers},然后使用 findOne 方法查询存储库。在这种情况下,url /rest/teachers/1
只是资源的标识符(没有 hateoas 就像 teacherID=1)
查询 /rest/class/2/teacher
的问题是您不知道它将解析什么 - 它可能是单个元素,它可能是一个列表,它可能是一个 null 等等,因为这不是资源的标识符,但 link 是另一个资源的标识符。