网易首页 > 网易号 > 正文 申请入驻

SpringBoot之:SpringBoot的HATEOAS基础

0
分享至

简介

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

链接Links

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

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

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

可以看到一个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 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 {

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 model = EntityModel.of(person);

对于集合,可以使用CollectionModel:

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

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

更多内容请参考 http://www.flydean.com/00043-springboot-hateoas-fundamentals/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
美财长:将用伊朗账户资金补偿海湾国家损失

美财长:将用伊朗账户资金补偿海湾国家损失

新京报
2026-06-11 22:21:07
把Claude Code接到本地模型后,Token账单消失了

把Claude Code接到本地模型后,Token账单消失了

Ping值焦虑
2026-06-13 00:42:42
首次拿顶薪!CBA这6人等续约,张镇麟双丰收,27岁国手辅佐胡金秋

首次拿顶薪!CBA这6人等续约,张镇麟双丰收,27岁国手辅佐胡金秋

体坛大事记
2026-06-12 09:12:46
人夫出轨高校女领导!近照曝光,细节不堪入目,校方最新回应来了

人夫出轨高校女领导!近照曝光,细节不堪入目,校方最新回应来了

铁锤妹妹是只猫
2026-06-12 20:21:42
“明亮红色球体”、“等离子体状球体”悬浮空中……美国防部公布第三批涉UFO档案

“明亮红色球体”、“等离子体状球体”悬浮空中……美国防部公布第三批涉UFO档案

环球网资讯
2026-06-12 22:38:17
咖位再高没用!张艺谋请不动的天后王菲献唱,却让配角打动了

咖位再高没用!张艺谋请不动的天后王菲献唱,却让配角打动了

东方不败然多多
2026-06-13 01:40:42
波切蒂诺:美国队只有赢得世界杯冠军才算成功,这是我的执念

波切蒂诺:美国队只有赢得世界杯冠军才算成功,这是我的执念

懂球帝
2026-06-12 09:33:06
演员陈敏儿去世

演员陈敏儿去世

扬子晚报
2026-06-12 18:49:13
打戏比《镖人》还多,仍被吐槽不如子丹战常威

打戏比《镖人》还多,仍被吐槽不如子丹战常威

生活观察员啊
2026-06-12 00:22:52
81岁传奇歌手宣布"最后一次",舞台上却说不服老

81岁传奇歌手宣布"最后一次",舞台上却说不服老

生活观察员啊
2026-06-13 01:01:19
中国男网传捷报!张之臻爆冷6号种子,轰11记ACE球,创造新纪录!

中国男网传捷报!张之臻爆冷6号种子,轰11记ACE球,创造新纪录!

刘姚尧的文字城堡
2026-06-12 07:55:24
为什么富家女普遍反而瘦瘦的

为什么富家女普遍反而瘦瘦的

自愈小日子
2026-06-12 01:22:41
具俊晔回韩4月近况曝光,汪小菲亏钱离婚真相

具俊晔回韩4月近况曝光,汪小菲亏钱离婚真相

蹲坑看世界
2026-06-13 00:33:09
WTT萨格勒布赛男单四强出炉,林诗栋爆冷温瑞博惜败

WTT萨格勒布赛男单四强出炉,林诗栋爆冷温瑞博惜败

余蹮搞笑段子
2026-06-13 03:25:31
塞尔:马竞原计划周四与B席签约,结果却被B席单方面终止协议

塞尔:马竞原计划周四与B席签约,结果却被B席单方面终止协议

懂球帝
2026-06-12 14:30:33
俞敏洪一针见血:北大那些漂亮女生,大多过得不幸福,原因很现实

俞敏洪一针见血:北大那些漂亮女生,大多过得不幸福,原因很现实

心理观察局
2026-06-02 06:52:06
川大和港理工研究发现:一个地方经济越落后,女生自拍P图越厉害

川大和港理工研究发现:一个地方经济越落后,女生自拍P图越厉害

必记本
2026-06-12 14:03:52
中国赞助商大撤退!本届世界杯为何满是“中国制造”却没中国身影

中国赞助商大撤退!本届世界杯为何满是“中国制造”却没中国身影

禁止读书
2026-06-12 20:17:07
斯皮尔伯格科幻新作首日全球票房突破1200万美元

斯皮尔伯格科幻新作首日全球票房突破1200万美元

追星雷达站
2026-06-13 01:19:09
强震过后,菲律宾不急救援,先对中国打出两张牌,中方态度坚决

强震过后,菲律宾不急救援,先对中国打出两张牌,中方态度坚决

莉莉和奶奶
2026-06-13 05:27:34
2026-06-13 06:52:49
flydean程序那些事
flydean程序那些事
最通俗的解读,最深刻的干货!
356文章数 438关注度
往期回顾 全部

科技要闻

刚刚,人类历史上首位万亿美元富豪诞生!

头条要闻

伊美谅解备忘录草案部分内容披露 涉及撤军、战争赔偿等

头条要闻

伊美谅解备忘录草案部分内容披露 涉及撤军、战争赔偿等

体育要闻

欧洲恐韩?肉德维德?

娱乐要闻

一天4个瓜,肖战热巴最意外

财经要闻

万亿美元顺差背后,透露这些信号

汽车要闻

标配激光雷达/双动力可选 昊铂S600限时售17.99万起

态度原创

游戏
教育
本地
房产
军事航空

索尼PS国区运营神了!玩梗《黑袍》:我会玩你的游戏

教育要闻

高考出分后,24小时内做好这7件事!

本地新闻

AK刘彰邂逅河北南大港湿地

房产要闻

海南最赚钱行业曝光!最快4年半,海口全款买三房!

军事要闻

伊朗媒体:已故最高领袖葬礼推迟举行

无障碍浏览 进入关怀版