1. 前言

1.1. 迁移到 Spring HATEOAS 1.0

对于 1.0,我们借此机会重新评估了我们为 0.x 分支所做的一些设计和包结构选择。 关于它的反馈数量惊人,而主要版本的增加似乎是重构这些反馈的最自然的地方。spring-doc.cn

1.1.1. 更改

包结构中最大的变化是由超媒体类型注册 API 的引入驱动的,以支持 Spring HATEOAS 中的其他媒体类型。 这导致客户端和服务器 API(分别命名的包)以及 package 中的媒体类型实现的明确分离。mediatypespring-doc.cn

将代码库升级到新 API 的最简单方法是使用迁移脚本。 在我们跳到那之前,以下是快速浏览的变化。spring-doc.cn

制图表达模型

/// 这组类从来没有真正感觉合适命名。 毕竟,这些类型实际上并不表示资源,而是可以通过超媒体信息和功能来丰富的表示模型。 以下是新名称与旧名称的映射方式:ResourceSupportResourceResourcesPagedResourcesspring-doc.cn

因此,已重命名为 及其方法 ,并分别重命名为 和 。 此外,名称更改已反映在 中包含的类中。ResourceAssemblerRepresentationModelAssemblertoResource(…)toResources(…)toModel(…)toCollectionModel(…)TypeReferencesspring-doc.cn

  • RepresentationModel.getLinks()现在公开一个实例(通过 a ),因为它公开了其他 API,以使用各种策略连接和合并不同的实例。 此外,它还被转换为自绑定泛型类型,以允许向实例添加链接的方法返回实例本身。LinksList<Link>Linksspring-doc.cn

  • API 已移至包中。LinkDiscovererclientspring-doc.cn

  • 和 API 已移至包中。LinkBuilderEntityLinksserverspring-doc.cn

  • ControllerLinkBuilder已移至 中并已弃用,替换为 。server.mvcWebMvcLinkBuilderspring-doc.cn

  • RelProvider已重命名为 ,并返回 instances 而不是 s。LinkRelationProviderLinkRelationStringspring-doc.cn

  • VndError已移动到包中。mediatype.vnderrorspring-doc.cn

1.1.2. 迁移脚本

您可以找到一个要从应用程序根目录运行的脚本,该脚本将更新所有 import 语句和静态方法引用,这些语句和静态方法引用将移动到我们的源代码存储库中。 只需下载它,从您的项目根目录运行它。 默认情况下,它将检查所有 Java 源文件,并将遗留的 Spring HATEOAS 类型引用替换为新的引用。spring-doc.cn

示例 1.迁移脚本的示例应用程序
$ ./migrate-to-1.0.sh

Migrating Spring HATEOAS references to 1.0 for files : *.java

Adapting ./src/main/java/…
…

Done!

请注意,该脚本不一定能够完全修复所有更改,但它应该涵盖最重要的重构。spring-doc.cn

现在,验证对您最喜欢的 Git 客户端中的文件所做的更改,并根据需要提交。 如果您发现方法或类型引用未迁移,请打开一个工单 in out 问题跟踪器。spring-doc.cn

1.1.3. 从 1.0 M3 迁移到 1.0 RC1

  • Link.andAffordance(…)采取 Affordance 详细信息已移至 。要手动构建实例,请使用 .另请注意为 Fluent 用法公开的新类型。有关详细信息,请参阅 AffordancesAffordancesAffordanceAffordances.of(link).afford(…)AffordanceBuilderAffordancesspring-doc.cn

  • AffordanceModelFactory.getAffordanceModel(…)现在 receives 和 instances 而不是 s 来允许非基于类型的实现。自定义媒体类型实现必须相应地进行调整。InputPayloadMetadataPayloadMetadataResolvableTypespring-doc.cn

  • 如果 HAL 表单的值符合规范中定义为 default 的内容,则 HAL 表单现在不会呈现属性。即,如果之前显式设置为 ,我们现在只需省略 的条目 。 我们现在还只强制它们对于用作 HTTP 方法的模板不是必需的。requiredfalserequiredPATCHspring-doc.cn