<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
SpringBoot提供了HATEOAS的便捷使用方式,本文詳細講解SpringBoot提供的這些基本方法。
HATEOAS的一個非常重要的特徵就是在resources資源中包含超媒體,而超媒體最簡單的表示就是連結。
Spring HATEOAS為我們簡化了封裝Links的功能。
我們看一個HTML中的link標籤的例子:
<head> <link rel="stylesheet" type="text/css" href="theme.css" rel="external nofollow" /> </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;
上面的例子中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中的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();
我們需要存取的是一個個的資源,然後需要在一個個的資源中加入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。
到此這篇關於SpringBoot中的HATEOAS詳情的文章就介紹到這了,更多相關HATEOAS內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45