简介

SpringBoot提供了HATEOAS的便捷使用方式,前面一篇文章我们也讲了如何在SpringBoot中使用HATEOAS。本文将会对这些内容进行扩展深入,详细讲解SpringBoot提供的这些基本方法。

链接Links

HATEOAS的一个非常重要的特征就是在resources资源中包含超媒体,而超媒体最简单的表示就是链接。

Spring HATEOAS为我们简化了封装Links的功能。

我们看一个HTML中的link标签的例子:

<head>
<link rel="stylesheet" type="text/css" href="theme.css" />
</head>

可以看到一个link有两个比较重要的属性,一个是href代表link的链接,还有一个属性是rel表示的当前文档与被链接文档之间的关系。

我们看下Link中的关键方法:

    public static Link of(String href) {return new Link(href);}public static Link of(String href, String relation) {return new Link(href, relation);}public static Link of(String href, LinkRelation relation) {return new Link(href, relation);}

可以传入href和relation来构建一个Link对象。

看下面的例子:

Link link = Link.of("/something");link = Link.of("/something", "my-rel");

其中LinkRelation是关联关系的一个封装接口,注意,它是一个接口,我们可以使用IanaLinkRelations中的具体实现来对其赋值,如下所示:

LinkRelation REL_SELF = IanaLinkRelations.SELF;
LinkRelation REL_FIRST = IanaLinkRelations.FIRST;
LinkRelation REL_PREVIOUS = IanaLinkRelations.PREV;
LinkRelation REL_NEXT = IanaLinkRelations.NEXT;
LinkRelation REL_LAST = IanaLinkRelations.LAST;

URI templates

上面的例子中link是指定好的,是静态的。有时候我们希望link可以根据参数进行变换,那么这样的link就是动态的link,我们可以通过定义URI模板来实现。

所以Link还可以通过UriTemplate来构建:

    public static Link of(UriTemplate template, String relation) {return new Link(template, relation);}public static Link of(UriTemplate template, LinkRelation relation) {return new Link(template, relation);}

UriTemplate是对URI模板的封装,我们看一个使用的例子:

Link link = Link.of("/{segment}/something{?parameter}");Map<String, Object> values = new HashMap<>();
values.put("segment", "path");
values.put("parameter", 42);assertThat(link.expand(values).getHref()) .isEqualTo("/path/something?parameter=42");

上面的例子中,通过string来构建一个link,然后调用expand传入参数对应的map,来构建真实的href值。

除了直接使用string之外,还可以传入UriTemplate:

UriTemplate template = UriTemplate.of("/{segment}/something").with(new TemplateVariable("parameter", VariableType.REQUEST_PARAM);assertThat(template.toString()).isEqualTo("/{segment}/something{?parameter}");

Link relations

Link relations指的是link中的ref属性。代表的是当前文档与被链接文档之间的关系。Spring HATEOAS中有一个LinkRelation类来表示。

IANA(Internet Assigned Numbers Authority)预定义了一些relations,可以通过IanaLinkRelations这个类来获取,如下所示:

Link link = Link.of("/some-resource"), IanaLinkRelations.NEXT);assertThat(link.getRel()).isEqualTo(LinkRelation.of("next"));
assertThat(IanaLinkRelation.isIanaRel(link.getRel())).isTrue();

Representation models

我们需要访问的是一个个的资源,然后需要在一个个的资源中加入link,Spring HATEOAS为我们提供了一个简单的类叫做RepresentationModel。它包含了Links和一些很方便的方法来帮助我们创建带链接的资源。

最简单的使用方法就是创建一个RepresentationModel的子类:

public class BookModel extends RepresentationModel<BookModel> {private final Book content;}

我们通过add方法来对其添加link:

bookModel.add(linkTo(methodOn(BookController.class).getBook(id)).withSelfRel());

注意,在这种情况下,我们的Accept类型应该是application/hal+json。

对于简单类型,我们可以直接使用EntityModel对其进行封装:

Person person = new Person("Dave", "Matthews");
EntityModel<Person> model = EntityModel.of(person);

对于集合,可以使用CollectionModel:

Collection<Person> people = Collections.singleton(new Person("Dave", "Matthews"));
CollectionModel<Person> model = CollectionModel.of(people);

总结

上讲解的Link,URI templates,Link relations和RepresentationModel就是Spring HATEOAS的基础,掌握了他们基本上就掌握了Spring HATEOAS。

如果本文对你有帮助,别忘记给我个3连 ,点赞,转发,评论,

咱们下期见!答案获取方式:已赞 已评 已关~

学习更多JAVA知识与技巧,关注与私信博主(03)

SpringBoot之:SpringBoot的HATEOAS基础相关推荐

  1. spring boot构建基础版web项目(一)springboot、thymeleaf控制层基础构

    原文作者:弥诺R 原文地址:http://www.minuor.com/147852147/article 转载声明:转载请注明原文地址,注意版权维护,谢谢! 写前说明 根据个人在各篇博文中看到的信息 ...

  2. 【Springboot】SpringBoot基础知识及整合Thymeleaf模板引擎

    文章目录 SpringBoot简介 SpringBoot是什么 为什么要学习SpringBoot SpringBoot的优势 学习SpringBoot前要具备的基础 创建第一个SpringBoot项目 ...

  3. 基于SpringBoot搭建应用开发框架(一) —— 基础架构

    基于SpringBoot搭建应用开发框架(一) -- 基础架构 目录 Spring的简史 零.开发技术简介 一.创建项目 1.创建工程 2.创建Starter 3.启动项目 4.Spring Boot ...

  4. SpringBoot学习笔记一:基础内容

    文章目录 SpringBoot基础内容 SpringBoot概述 SpringBoot功能 SpringBoot快速入门 需求 实现步骤 总结 SpringBoot项目快速构建 SpringBoot起 ...

  5. 【SpringBoot 】SpringBoot注解详解

    [SpringBoot ]SpringBoot注解详解 一.注解(annotations)列表  @SpringBootApplication:包含了@ComponentScan.@Configura ...

  6. 【SpringBoot】SpringBoot入门

    SpringBoot入门 SpringBoot简介 SpringBoot快速入门 SpringBoot快速启动 SpringBoot概述 程序启动 切换web服务器 配置文件 配置文件格式 yaml格 ...

  7. SpringBoot(6) SpringBoot配置全局异常

    SpringBoot(6) SpringBoot配置全局异常 参考文章: (1)SpringBoot(6) SpringBoot配置全局异常 (2)https://www.cnblogs.com/pl ...

  8. SpringBoot序幕——SpringBoot概述及其项目创建

    ⭐️前面的话⭐️ 本篇文章介绍什么是SpringBoot,SpringBoot的优点,以及如何使用IDEA创建SpringBoot项目以及在官网如何创建项目.

  9. 计算机毕业设计springboot基于Springboot的在线教育平台的设计与实现8qecq源码+系统+程序+lw文档+部署

    计算机毕业设计springboot基于Springboot的在线教育平台的设计与实现8qecq源码+系统+程序+lw文档+部署 计算机毕业设计springboot基于Springboot的在线教育平台 ...

  10. 【SpringBoot】SpringBoot @ConfigurationProperties 注解 用法与加载static静态属性

    @ConfigurationProperties [SpringBoot]SpringBoot @ConfigurationProperties 注解 用法与加载static静态属性 @Configu ...

最新文章

  1. 数据中台应该包含什么?
  2. xp创建虚拟服务器,Xp系统怎么创建虚拟目录?Xp系统创建虚拟目录的方法
  3. 下一代超大规模软件定义网络技术实践
  4. AOP的研究认识了MVC
  5. 模拟 POJ 2632 Crashing Robots
  6. 双赛道近四百万奖金,2021全国人工智能大赛来了!
  7. ubuntu远程桌面连接命令rdesktop连接windows远程桌面详解
  8. c语言得到txt文件的长度,我利用C语言实现SHA-256算法,需要从一个txt文件中读出数据并把...
  9. Java之for和while的内容
  10. SylixOS网络性能测试
  11. 通过复制oracle软件方式安装oracle数据库
  12. 由单目标跟踪实现多目标跟踪的思想框架
  13. 推荐四个网盘资源搜索工具
  14. 基于51单片的电风扇系统
  15. Scipy总结(constants)
  16. Nginx $request_uri和$uri详解
  17. 蓝光播放器中应用的触摸芯片
  18. 工业智能网关BL110详解之八十五: 实现西门子S7-1200 PLC接入OPC UA云平台
  19. KDJ 技术指标实战技巧
  20. 对android小程序的结论,微信小程序引入外部字体总结(针对安卓加载缓慢问题)...

热门文章

  1. 在线OFFICE文档编辑器
  2. java接口防_java接口如何有效防止恶意请求
  3. 百度APIStore
  4. 36进制--Java
  5. 「管理科学」高校科研项目管理信息化建设研究
  6. DDD-如何集成限界上下文和应用服务的使用
  7. 计算机科学和统计学他俩差差,432统计学[专硕]考研复习资料2020年湖南师范大学数学与计算机科学学院...
  8. H3C交换机和华为交换机对接聚合组,爬深坑
  9. 刚开始做 飞鸽传书2007 很兴奋
  10. 国家大数据政策文件汇编(2022年) 附下载