簡介
HATEOAS是實現(xiàn)REST規(guī)范的一種原則,通過遵循HATEOAS規(guī)范,可以解決我們實際代碼實現(xiàn)的各種個問題。作為java最流行的框架Spring
當(dāng)然也會不缺席HATEOAS的集成。
本文將會通過一個具體的例子來講解如何在SpringBoot中使用HATEOAS。
文章目標(biāo)
HATEOAS規(guī)則中,返回的數(shù)據(jù)會帶有鏈接。我們以熟悉的Book為例,來展示這次的HATEOAS,首先創(chuàng)建一個Book entity:
我們希望能夠通過下面的鏈接來獲取到Book的詳細(xì)數(shù)據(jù):
GET /book/1
返回的數(shù)據(jù)如下:
可以看到在返回的數(shù)據(jù)中除了content包含了book的信息之外,還有一個_links屬性,表示和該Book相關(guān)的資源鏈接。
構(gòu)建Entity和Repository
在做任何數(shù)據(jù)之前,我們都需要構(gòu)建相應(yīng)的數(shù)據(jù),也就是entity和對應(yīng)的數(shù)據(jù)操作,為了簡便起見,我們使用H2的內(nèi)存數(shù)據(jù)庫。
我們需要在application.properties中配置如下:
然后配置對應(yīng)的repository :
同時,需要在resources中放置創(chuàng)建table的schema.sql和插入數(shù)據(jù)的data.sql。這樣在程序啟動的時候就可以自動創(chuàng)建相應(yīng)的數(shù)據(jù)。
構(gòu)建HATEOAS相關(guān)的RepresentationModel
如果要讓自己來實現(xiàn),也可以實現(xiàn)添加鏈接的操作,但是這樣就太復(fù)雜了,還好我們有Spring。
要在Spring中使用HATEOAS,需要進(jìn)行如下配置:
如果我們想要對Book進(jìn)行HATEOAS的構(gòu)建,那么可以構(gòu)建一個類,繼承RepresentationModel即可:
上面的例子中,我們用RepresentationModel
封裝了一個Book對象,并將其設(shè)置為json的content屬性。
構(gòu)建Controller
有了RepresentationModel,我們就可以使用它來構(gòu)建HATEOAS的響應(yīng)了。
我們看下面的例子:
上面的例子中,我們使用@RequestMapping來構(gòu)建了一個HTTP請求,通過傳入book的id來從數(shù)據(jù)庫中查找相應(yīng)的Book數(shù)據(jù)。
然后將其傳入BookModel中,構(gòu)建好RepresentationModel。這時候可以直接返回這個對象。但是我們還需要向其添加一些links。
我們使用bookModel.add來添加相應(yīng)的link。并且使用linkTo方法來生成相應(yīng)的link。最后將RepresentationModel返回。當(dāng)我們請求/book/1的時候,就會得到最前面我們想要得到的json值。使用HATEOAS是不是很簡單?
HATEOAS的意義
HATEOAS帶有相應(yīng)的資源鏈接,通過一個資源就可以得到從這個資源可以訪問的其他的資源,就像是一個訪問到一個頁面,可以再通過這個頁面去訪問其他的頁面一樣。所以HATEOAS的意義就在于我們只需要訪問一個資源就可以遍歷所有的資源。我們通過測試來體驗一下資源的訪問。
首先,我們直接訪問/book/1這個資源,來確認(rèn)下得到的結(jié)果:
然后再通過Spring HATEOAS提供的Traverson類來進(jìn)行鏈接的遍歷:
到此這篇關(guān)于在SpringBoot中使用HATEOAS的方法的文章就介紹到這了,更多相關(guān)SpringBoot使用HATEOAS內(nèi)容請搜索html5模板網(wǎng)以前的文章希望大家以后多多支持html5模板網(wǎng)!