集成
本节详细介绍了与 Spring Data REST 组件集成的各种方式,无论是从使用 Spring Data REST 的 Spring 应用程序中,还是通过其他方式。
编程式链接
有时你需要在自定义的 Spring MVC 控制器中为导出的资源添加链接。以下是三种基本的链接级别:
-
手动组装链接。
-
使用 Spring HATEOAS 的 LinkBuilder 以及
linkTo()
、slash()
等方法。 -
使用 Spring Data REST 实现的 RepositoryEntityLinks。
第一个建议非常糟糕,应该不惜一切代价避免使用。它会使你的代码变得脆弱且高风险。第二个建议在创建指向其他手写 Spring MVC 控制器的链接时非常方便。最后一个建议,我们将在本节其余部分探讨,适用于查找由 Spring Data REST 导出的资源链接。
考虑以下类,它使用了 Spring 的自动装配:
public class MyWebApp {
private RepositoryEntityLinks entityLinks;
@Autowired
public MyWebApp(RepositoryEntityLinks entityLinks) {
this.entityLinks = entityLinks;
}
}
在前面的示例类中,你可以使用以下操作:
表 1. 链接到导出资源的方式
方法 | 描述 |
---|---|
entityLinks.linkToCollectionResource(Person.class) | 提供指向指定类型(在此示例中为 Person )的集合资源的链接。 |
entityLinks.linkToItemResource(Person.class, 1) | 提供指向单个资源的链接。 |
entityLinks.linkToPagedResource(Person.class, new PageRequest(…)) | 提供指向分页资源的链接。 |
entityLinks.linksToSearchResources(Person.class) | 提供由相应存储库公开的所有查找器方法的链接列表。 |
entityLinks.linkToSearchResource(Person.class, "findByLastName") | 通过 rel (即查找器的名称)提供查找器链接。 |
备注
所有基于搜索的链接都支持用于分页和排序的额外参数。详情请参阅 RepositoryEntityLinks。还有一个 linkFor(Class<?> type)
方法,但它返回的是 Spring HATEOAS 的 LinkBuilder
,这将使您回到较低级别的 API。建议先尝试使用其他方法。