1. 前言
1.1. 迁移到 Spring HATEOAS 1.0
对于 1.0 版本,我们借此机会重新评估了为 0.x 分支所做的一些设计和包结构选择。 对此我们收到了大量的反馈,而大版本升级似乎是重构这些内容的最佳时机。
1.1.1. 变更内容
包结构的最大变化是由引入超媒体类型注册 API 所驱动的,旨在支持 Spring HATEOAS 中的其他媒体类型。
这导致了客户端和服务器 API(分别命名对应的包)以及 mediatype 包中的媒体类型实现的清晰分离。
将代码库升级到新 API 的最简单方法是使用迁移脚本。 在开始之前,我们先快速概览一下这些变更。
表示模型
ResourceSupport/Resource/Resources/PagedResources 这一组类的命名始终让人觉得不够恰当。
毕竟,这些类型并非真正体现资源,而是表示模型,可以丰富超媒体信息和功能。
以下是新名称与旧名称的映射关系:
-
ResourceSupport现在是RepresentationModel -
Resource现在是EntityModel -
Resources现在是CollectionModel -
PagedResources现在是PagedModel
因此,ResourceAssembler 已重命名为 RepresentationModelAssembler,其方法 toResource(…) 和 toResources(…) 已分别重命名为 toModel(…) 和 toCollectionModel(…)。
此外,名称变更也已反映在 TypeReferences 所包含的类中。
-
RepresentationModel.getLinks()现在暴露一个Links实例(而非List<Link>),因为它提供了额外的 API,可使用多种策略连接和合并不同的Links实例。 此外,它已转变为自绑定泛型类型,以允许添加链接到该实例的方法返回实例本身。 -
LinkDiscovererAPI 已移至client包。 -
LinkBuilder和EntityLinksAPI 已移至server包中。 -
ControllerLinkBuilder已被移入server.mvc,并标记为弃用,将由WebMvcLinkBuilder替代。 -
RelProvider已重命名为LinkRelationProvider,并返回LinkRelation实例,而非String。 -
VndError已移至mediatype.vnderror包。
1.1.2. 迁移脚本
您可以找到一个脚本,从您的应用程序根目录运行该脚本,它将更新所有导入语句和静态方法引用,以适配在我们源代码仓库中已移动的 Spring HATEOAS 类型。 只需下载该脚本,并从您的项目根目录运行它。 默认情况下,它将检查所有 Java 源文件,并将旧的 Spring HATEOAS 类型引用替换为新的引用。
$ ./migrate-to-1.0.sh
Migrating Spring HATEOAS references to 1.0 for files : *.java
Adapting ./src/main/java/…
…
Done!
请注意,该脚本未必能够完全修复所有更改,但它应涵盖最重要的重构内容。
现在请在您喜欢的 Git 客户端中验证对文件所做的更改,并按需提交。 如果您发现未迁移的方法或类型引用,请在我们的问题跟踪器中提交工单。
1.1.3. 从 1.0 M3 迁移到 1.0 RC1
-
Link.andAffordance(…)获取 Affordance 的详细信息已移至Affordances。若要手动构建Affordance实例,现在请使用Affordances.of(link).afford(…)。另请注意,Affordances暴露了新的AffordanceBuilder类型以支持流式用法。详见 Affordances。 -
AffordanceModelFactory.getAffordanceModel(…)现在接收InputPayloadMetadata和PayloadMetadata实例,而非ResolvableType,以支持非基于类型的实现。自定义媒体类型实现需相应适配。 -
HAL Forms 现在如果属性值符合规范中定义的默认值,将不再渲染这些属性。也就是说,如果之前
required被显式设置为false,我们现在会直接省略required的条目。 此外,我们现在仅对使用PATCH作为 HTTP 方法的模板强制将其设置为非必填项。