生成的 HAL 自身中缺少分页参数 link
Missing paging arguments in generated HAL self link
我正在使用 Spring Boot (2.1.1) 自动创建我的 JpaRepository
接口的 HAL REST API。
大多数情况下这些接口都是空的,例如:
public interface LevelRepository extends JpaRepository<Level, Long> {}
当我打开 REST 基本路径时,会为 levels
生成以下 link:
"levels": {
"href": "http://localhost:8080/admin/levels{?page,size,sort}",
"templated": true
}
当我跟随 http://localhost:8080/admin/levels?size=10
时,我得到了预期的第 0 页及其 10 个元素。
但是给定的自我 link 是:
"self": {
"href": "http://localhost:8080/admin/levels{&sort}",
"templated": true
}
我本以为:
http://localhost:8080/admin/levels{?page,size,sort}
或
http://localhost:8080/admin/levels?page=0&size=10{&sort}
我不确定这是错误还是功能?是否有可能获得预期的行为?
我发现了以下关于该主题的问题:Error on generating self link on pageable resource
但是给定的解决方案没有帮助,因为我已经在使用较新的版本。
更多信息(我为什么需要它?)
此行为中断了客户端的后续 link 流程。
如果用户想直接跳转到第X页,或者想改变页面大小,就必须重用原来的link。
不是一个大的解决方法,但它不如模板化和直接跟随给定的自我 link 好。
您可以自己重新实现 self
link。首先,我认为你使用 HATEOAS
库:
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
</dependency>
让我们考虑一下您的一些实体 - ExampleEntity
:
public class ExampleEntity extends ResourceSupport {
private String id;
private String name;
private String surname;
// standard getters and setters
}
您扩展了 ResourceSupport
class,它有 link
属性,我们可以使用 add
方法:
ExampleEntity exampleEntity = new ExampleEntity();
Link selfLink = ControllerLinkBuilder.linkTo(YourController.class).slash(id).withSelfRel();
exampleEntity.add(selfLink);
所以,你可以改变自己的行为link
发布此问题后,我发现以下 Spring JIRA ticket 描述了相同的行为。
根据票证中的评论,self link 不应被模板化。
虽然生成的 self link 是模板化的,但最好忽略给定的参数。
我正在使用 Spring Boot (2.1.1) 自动创建我的 JpaRepository
接口的 HAL REST API。
大多数情况下这些接口都是空的,例如:
public interface LevelRepository extends JpaRepository<Level, Long> {}
当我打开 REST 基本路径时,会为 levels
生成以下 link:
"levels": {
"href": "http://localhost:8080/admin/levels{?page,size,sort}",
"templated": true
}
当我跟随 http://localhost:8080/admin/levels?size=10
时,我得到了预期的第 0 页及其 10 个元素。
但是给定的自我 link 是:
"self": {
"href": "http://localhost:8080/admin/levels{&sort}",
"templated": true
}
我本以为:
http://localhost:8080/admin/levels{?page,size,sort}
或http://localhost:8080/admin/levels?page=0&size=10{&sort}
我不确定这是错误还是功能?是否有可能获得预期的行为?
我发现了以下关于该主题的问题:Error on generating self link on pageable resource 但是给定的解决方案没有帮助,因为我已经在使用较新的版本。
更多信息(我为什么需要它?)
此行为中断了客户端的后续 link 流程。 如果用户想直接跳转到第X页,或者想改变页面大小,就必须重用原来的link。 不是一个大的解决方法,但它不如模板化和直接跟随给定的自我 link 好。
您可以自己重新实现 self
link。首先,我认为你使用 HATEOAS
库:
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
</dependency>
让我们考虑一下您的一些实体 - ExampleEntity
:
public class ExampleEntity extends ResourceSupport {
private String id;
private String name;
private String surname;
// standard getters and setters
}
您扩展了 ResourceSupport
class,它有 link
属性,我们可以使用 add
方法:
ExampleEntity exampleEntity = new ExampleEntity();
Link selfLink = ControllerLinkBuilder.linkTo(YourController.class).slash(id).withSelfRel();
exampleEntity.add(selfLink);
所以,你可以改变自己的行为link
发布此问题后,我发现以下 Spring JIRA ticket 描述了相同的行为。 根据票证中的评论,self link 不应被模板化。
虽然生成的 self link 是模板化的,但最好忽略给定的参数。