1. 前言

1.1. 迁移到 Spring HATEOAS 1.0

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

1.1.1. 变化

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

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

表示模型

ResourceSupport/Resource/Resources/PagedResources班级组从来没有真正觉得命名恰当。 毕竟,这些类型实际上并不是表现出资源,而是可以通过超媒体信息和可供性来丰富的表示模型。 以下是新名称映射到旧名称的方式:spring-doc.cadn.net.cn

因此ResourceAssembler已重命名为RepresentationModelAssembler及其方法toResource(…)toResources(…)已重命名为toModel(…)toCollectionModel(…)分别。 此外,名称更改已反映在TypeReferences.spring-doc.cadn.net.cn

  • RepresentationModel.getLinks()现在公开一个Links实例(通过List<Link>)的 API 会公开额外的 API 来连接和合并不同的Links使用各种策略的实例。 此外,它已转换为自绑定泛型类型,以允许向实例添加链接的方法返回实例本身。spring-doc.cadn.net.cn

  • LinkDiscovererAPI 已移至client包。spring-doc.cadn.net.cn

  • LinkBuilderEntityLinksAPI 已移至server包。spring-doc.cadn.net.cn

  • ControllerLinkBuilder已移至server.mvc并被弃用,替换为WebMvcLinkBuilder.spring-doc.cadn.net.cn

  • RelProvider已重命名为LinkRelationProvider并返回LinkRelation实例而不是Strings.spring-doc.cadn.net.cn

  • VndError已移至mediatype.vnderror包。spring-doc.cadn.net.cn

1.1.2. 迁移脚本

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

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

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

Adapting ./src/main/java/…
…

Done!

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

现在验证对您最喜欢的 Git 客户端中的文件所做的更改,并酌情提交。 如果您发现方法或类型引用未迁移,请打开工单输入问题跟踪器。spring-doc.cadn.net.cn

1.1.3. 从 1.0 M3 迁移到 1.0 RC1

  • Link.andAffordance(…)采取可供性详细信息已移至Affordances.手动构建Affordance实例现在使用Affordances.of(link).afford(…).另请注意,新的AffordanceBuilder类型公开自Affordances流畅的使用。有关详细信息,请参阅可供性spring-doc.cadn.net.cn

  • AffordanceModelFactory.getAffordanceModel(…)现在收到InputPayloadMetadataPayloadMetadata实例而不是ResolvableTypes 以允许非基于类型的实现。自定义媒体类型实现必须相应地适应这一点。spring-doc.cadn.net.cn

  • 现在,如果属性属性的值符合规范中定义为默认值的值,则 HAL Forms 不会呈现属性属性。即如果以前required被显式设置为false,我们现在只是省略了required. 我们现在也只强制它们对于使用PATCH作为 HTTP 方法。spring-doc.cadn.net.cn