最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中的HATEOAS詳情

 更新時(shí)間:2022年05月17日 08:31:18   作者:??程序那些事????  
這篇文章主要介紹了SpringBoot中的HATEOAS詳情,SpringBoot提供了HATEOAS的便捷使用方式,文章圍繞主題展開(kāi)詳細(xì)介紹內(nèi)容,需要的小伙伴可以參考一下

簡(jiǎn)介

SpringBoot提供了HATEOAS的便捷使用方式,本文詳細(xì)講解SpringBoot提供的這些基本方法。

鏈接Links

HATEOAS的一個(gè)非常重要的特征就是在resources資源中包含超媒體,而超媒體最簡(jiǎn)單的表示就是鏈接。

Spring HATEOAS為我們簡(jiǎn)化了封裝Links的功能。

我們看一個(gè)HTML中的link標(biāo)簽的例子:

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

可以看到一個(gè)link有兩個(gè)比較重要的屬性,一個(gè)是href代表link的鏈接,還有一個(gè)屬性是rel表示的當(dāng)前文檔與被鏈接文檔之間的關(guān)系。

我們看下Link中的關(guān)鍵方法:

	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來(lái)構(gòu)建一個(gè)Link對(duì)象。

看下面的例子:

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

其中LinkRelation是關(guān)聯(lián)關(guān)系的一個(gè)封裝接口,注意,它是一個(gè)接口,我們可以使用IanaLinkRelations中的具體實(shí)現(xiàn)來(lái)對(duì)其賦值,如下所示:

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

上面的例子中l(wèi)ink是指定好的,是靜態(tài)的。有時(shí)候我們希望link可以根據(jù)參數(shù)進(jìn)行變換,那么這樣的link就是動(dòng)態(tài)的link,我們可以通過(guò)定義URI模板來(lái)實(shí)現(xiàn)。

所以Link還可以通過(guò)UriTemplate來(lái)構(gòu)建:

	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是對(duì)URI模板的封裝,我們看一個(gè)使用的例子:

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");

上面的例子中,通過(guò)string來(lái)構(gòu)建一個(gè)link,然后調(diào)用expand傳入?yún)?shù)對(duì)應(yīng)的map,來(lái)構(gòu)建真實(shí)的href值。

除了直接使用string之外,還可以傳入U(xiǎn)riTemplate:

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屬性。代表的是當(dāng)前文檔與被鏈接文檔之間的關(guān)系。Spring HATEOAS中有一個(gè)LinkRelation類(lèi)來(lái)表示。

IANA(Internet Assigned Numbers Authority)預(yù)定義了一些relations,可以通過(guò)IanaLinkRelations這個(gè)類(lèi)來(lái)獲取,如下所示:

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

Representation models

我們需要訪問(wèn)的是一個(gè)個(gè)的資源,然后需要在一個(gè)個(gè)的資源中加入link,Spring HATEOAS為我們提供了一個(gè)簡(jiǎn)單的類(lèi)叫做RepresentationModel。它包含了Links和一些很方便的方法來(lái)幫助我們創(chuàng)建帶鏈接的資源。

最簡(jiǎn)單的使用方法就是創(chuàng)建一個(gè)RepresentationModel的子類(lèi):

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

}

我們通過(guò)add方法來(lái)對(duì)其添加link:

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

注意:在這種情況下,我們的Accept類(lèi)型應(yīng)該是application/hal+json。

對(duì)于簡(jiǎn)單類(lèi)型,我們可以直接使用EntityModel對(duì)其進(jìn)行封裝:

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

對(duì)于集合,可以使用CollectionModel:

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

總結(jié)

上講解的Link,URI templates,Link relations和RepresentationModel就是Spring HATEOAS的基礎(chǔ),掌握了他們基本上就掌握了Spring HATEOAS。

到此這篇關(guān)于SpringBoot中的HATEOAS詳情的文章就介紹到這了,更多相關(guān)HATEOAS內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot集成Spring Cache過(guò)程詳解

    Spring Boot集成Spring Cache過(guò)程詳解

    這篇文章主要介紹了Spring Boot集成Spring Cache過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 詳細(xì)講解Java中的main()方法

    詳細(xì)講解Java中的main()方法

    在java中main()方法是java應(yīng)用程序的入口方法,由此可見(jiàn)main方法是很重要的,那么下面這篇文章就給大家詳解介紹了Java中的main()方法,需要的朋友可以參考下。
    2016-09-09
  • java多線程編程之使用runnable接口創(chuàng)建線程

    java多線程編程之使用runnable接口創(chuàng)建線程

    實(shí)現(xiàn)Runnable接口的類(lèi)必須使用Thread類(lèi)的實(shí)例才能創(chuàng)建線程,通過(guò)Runnable接口創(chuàng)建線程分為以下兩步
    2014-01-01
  • java實(shí)現(xiàn)打字游戲小程序

    java實(shí)現(xiàn)打字游戲小程序

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)打字游戲小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Java調(diào)用MySQL存儲(chǔ)過(guò)程并獲得返回值的方法

    Java調(diào)用MySQL存儲(chǔ)過(guò)程并獲得返回值的方法

    這篇文章主要介紹了Java調(diào)用MySQL存儲(chǔ)過(guò)程并獲得返回值的方法,實(shí)例分析了java實(shí)現(xiàn)MySQL存儲(chǔ)過(guò)程的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • ElasticSearch不停機(jī)重建索引延伸思考及優(yōu)化詳解

    ElasticSearch不停機(jī)重建索引延伸思考及優(yōu)化詳解

    這篇文章主要為大家介紹了ElasticSearch不停機(jī)重建索引延伸思考及優(yōu)化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 老生常談Java網(wǎng)絡(luò)編程TCP通信(必看篇)

    老生常談Java網(wǎng)絡(luò)編程TCP通信(必看篇)

    下面小編就為大家?guī)?lái)一篇老生常談Java網(wǎng)絡(luò)編程TCP通信(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 淺入淺出的講解Spring循環(huán)依賴(lài)問(wèn)題

    淺入淺出的講解Spring循環(huán)依賴(lài)問(wèn)題

    循環(huán)依賴(lài)其實(shí)就是循環(huán)引用,也就是兩個(gè)或則兩個(gè)以上的bean互相持有對(duì)方,最終形成閉環(huán),下面這篇文章主要給大家介紹了關(guān)于Spring循環(huán)依賴(lài)問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • java鏈表數(shù)據(jù)結(jié)構(gòu)LinkedList插入刪除元素時(shí)間復(fù)雜度面試精講

    java鏈表數(shù)據(jù)結(jié)構(gòu)LinkedList插入刪除元素時(shí)間復(fù)雜度面試精講

    這篇文章主要為大家介紹了java LinkedList插入和刪除元素的時(shí)間復(fù)雜度面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • SpringBoot校園綜合管理系統(tǒng)實(shí)現(xiàn)流程分步講解

    SpringBoot校園綜合管理系統(tǒng)實(shí)現(xiàn)流程分步講解

    這篇文章主要介紹了SpringBoot+Vue實(shí)現(xiàn)校園綜合管理系統(tǒng)流程分步講解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-09-09

最新評(píng)論

神农架林区| 凤城市| 丹棱县| 进贤县| 仁化县| 罗平县| 陇南市| 宝坻区| 北票市| 麻阳| 土默特左旗| 聂荣县| 博客| 册亨县| 连云港市| 宁陵县| 泽州县| 清徐县| 石嘴山市| 高邑县| 三江| 内江市| 浮梁县| 都江堰市| 石棉县| 社旗县| 绿春县| 黑水县| 深州市| 田东县| 大宁县| 丹巴县| 庐江县| 大埔区| 广元市| 徐州市| 和政县| 东阳市| 封开县| 简阳市| 三河市|