pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

在SpringBoot中使用HATEOAS的方法

這篇文章主要介紹了在SpringBoot中使用HATEOAS的方法,HATEOAS是實現(xiàn)REST規(guī)范的一種原則,通過遵循HATEOAS規(guī)范,可以解決我們實際代碼實現(xiàn)的各種個問題,下文更多相關介紹,需要的小伙伴可

簡介

HATEOAS是實現(xiàn)REST規(guī)范的一種原則,通過遵循HATEOAS規(guī)范,可以解決我們實際代碼實現(xiàn)的各種個問題。作為java最流行的框架Spring
當然也會不缺席HATEOAS的集成。

本文將會通過一個具體的例子來講解如何在SpringBoot中使用HATEOAS。

文章目標

HATEOAS規(guī)則中,返回的數(shù)據(jù)會帶有鏈接。我們以熟悉的Book為例,來展示這次的HATEOAS,首先創(chuàng)建一個Book entity:

@Data
@Entity
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
}

我們希望能夠通過下面的鏈接來獲取到Book的詳細數(shù)據(jù):

GET /book/1

返回的數(shù)據(jù)如下:

{
    "content": {
        "id": 1,
        "title": "The Hobbit"
    },
    "_links": {
        "self": {
            "href": "http://localhost:8080/book/1"
        }
    }
}

可以看到在返回的數(shù)據(jù)中除了content包含了book的信息之外,還有一個_links屬性,表示和該Book相關的資源鏈接。

構建Entity和Repository

在做任何數(shù)據(jù)之前,我們都需要構建相應的數(shù)據(jù),也就是entity和對應的數(shù)據(jù)操作,為了簡便起見,我們使用H2的內(nèi)存數(shù)據(jù)庫。

我們需要在application.properties中配置如下:

spring.jpa.hibernate.ddl-auto=validate
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

然后配置對應的repository :

public interface BookRepository extends CrudRepository<Book, Long> {
    long deleteByTitle(String title);

    @Modifying
    @Query("delete from Book b where b.title=:title")
    void deleteBooks(@Param("title") String title);
}

同時,需要在resources中放置創(chuàng)建table的schema.sql和插入數(shù)據(jù)的data.sql。這樣在程序啟動的時候就可以自動創(chuàng)建相應的數(shù)據(jù)。

構建HATEOAS相關的RepresentationModel

如果要讓自己來實現(xiàn),也可以實現(xiàn)添加鏈接的操作,但是這樣就太復雜了,還好我們有Spring。

要在Spring中使用HATEOAS,需要進行如下配置:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-hateoas</artifactId>
        </dependency>

如果我們想要對Book進行HATEOAS的構建,那么可以構建一個類,繼承RepresentationModel即可:

public class BookModel extends RepresentationModel<BookModel> {
    private final Book content;
    @JsonCreator
    public BookModel(@JsonProperty("content") Book content) {
        this.content = content;
    }
    public Book getContent() {
        return content;
    }
}

上面的例子中,我們用RepresentationModel封裝了一個Book對象,并將其設置為json的content屬性。

構建Controller

有了RepresentationModel,我們就可以使用它來構建HATEOAS的響應了。

我們看下面的例子:

	@RequestMapping("/book/{id}")
	public HttpEntity<Book> getBook(@PathVariable("id") Long id) {
		Book book= bookRepository.findById(id).get();
		BookModel bookModel = new BookModel(book);
		bookModel.add(linkTo(methodOn(BookController.class).getBook(id)).withSelfRel());
		return new ResponseEntity(bookModel, HttpStatus.OK);
	}

上面的例子中,我們使用@RequestMapping來構建了一個HTTP請求,通過傳入book的id來從數(shù)據(jù)庫中查找相應的Book數(shù)據(jù)。

然后將其傳入BookModel中,構建好RepresentationModel。這時候可以直接返回這個對象。但是我們還需要向其添加一些links。

我們使用bookModel.add來添加相應的link。并且使用linkTo方法來生成相應的link。最后將RepresentationModel返回。當我們請求/book/1的時候,就會得到最前面我們想要得到的json值。使用HATEOAS是不是很簡單?

HATEOAS的意義

HATEOAS帶有相應的資源鏈接,通過一個資源就可以得到從這個資源可以訪問的其他的資源,就像是一個訪問到一個頁面,可以再通過這個頁面去訪問其他的頁面一樣。所以HATEOAS的意義就在于我們只需要訪問一個資源就可以遍歷所有的資源。我們通過測試來體驗一下資源的訪問。

首先,我們直接訪問/book/1這個資源,來確認下得到的結果:

    @Test
    void envEndpointNotHidden() throws Exception {
        mockMvc.perform(get("/book/1"))
                .andExpect(jsonPath("$.content.title").value("The Hobbit"));
    }

然后再通過Spring HATEOAS提供的Traverson類來進行鏈接的遍歷:

	@Test
	void envEndpointNotHidden() throws Exception {
		Traverson traverson = new Traverson(new URI("http://localhost:" + this.port + "/book/1"), MediaTypes.HAL_JSON);
		String bookTitle = traverson.follow("self").toObject("$.content.title");
		assertThat(bookTitle).isEqualTo("The Hobbit");
	}

到此這篇關于在SpringBoot中使用HATEOAS的方法的文章就介紹到這了,更多相關SpringBoot使用HATEOAS內(nèi)容請搜索html5模板網(wǎng)以前的文章希望大家以后多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權益,請聯(lián)系我們刪除處理,感謝您的支持!

相關文檔推薦

這篇文章主要為大家詳細介紹了如何利用SpringBoot+WebSocket實現(xiàn)即時通訊功能,文中示例代碼講解詳細,對我們學習或工作有一定參考價值,需要的可以參考一下
本文主要介紹了SpringBoot二維碼生成base64并上傳OSS的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學
本文主要介紹了SpringSecurity實現(xiàn)退出登錄和退出處理器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習
這篇文章主要為大家詳細介紹了Java使用MulticastSocket實現(xiàn)群聊應用程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要為大家介紹了JavaString中intern方法的原理以及使用。文中通過圖片和示例代碼進行了詳細展示,感興趣的小伙伴可以跟隨小編一起學習一下
這篇文章主要介紹了Spring?boot?整合?Redisson實現(xiàn)分布式鎖并驗證,redisson是官方推薦的分布式鎖實現(xiàn)方案,采用redis自身的原子命令和lua腳本來實現(xiàn),需要的朋友可以參考下
主站蜘蛛池模板: 手术示教系统-数字化手术室系统-林之硕医疗云智能视频平台 | 衢州装饰公司|装潢公司|办公楼装修|排屋装修|别墅装修-衢州佳盛装饰 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 奥运星-汽车性能网评-提供个性化汽车资讯 | 法兰螺母 - 不锈钢螺母制造厂家 - 万千紧固件--螺母街 | 食药成分检测_调料配方还原_洗涤剂化学成分分析_饲料_百检信息科技有限公司 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 | 空气能暖气片,暖气片厂家,山东暖气片,临沂暖气片-临沂永超暖通设备有限公司 | 飞利浦LED体育场灯具-吸顶式油站灯-飞利浦LED罩棚灯-佛山嘉耀照明有限公司 | 河南不锈钢水箱_地埋水箱_镀锌板水箱_消防水箱厂家-河南联固供水设备有限公司 | 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 香蕉筛|直线|等厚|弧形|振动筛|香蕉筛厂家-洛阳隆中重工 | 亿诺千企网-企业核心产品贸易| 船用锚链|专业锚链生产厂家|安徽亚太锚链制造有限公司 | 电磁铁_推拉电磁铁_机械手电磁吸盘电磁铁厂家-广州思德隆电子公司 | 智慧物联网行业一站式解决方案提供商-北京东成基业 | 冷却塔降噪隔音_冷却塔噪声治理_冷却塔噪音处理厂家-广东康明冷却塔降噪厂家 | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 冷藏车厂家|冷藏车价格|小型冷藏车|散装饲料车厂家|程力专用汽车股份有限公司销售十二分公司 | 机械立体车库租赁_立体停车设备出租_智能停车场厂家_春华起重 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 | 儋州在线-儋州招聘找工作、找房子、找对象,儋州综合生活信息门户! | 防火阀、排烟防火阀、电动防火阀产品生产销售商-德州凯亿空调设备有限公司 | 液压压力机,液压折弯机,液压剪板机,模锻液压机-鲁南新力机床有限公司 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 精准猎取科技资讯,高效阅读科技新闻_科技猎 | LED投光灯-工矿灯-led路灯头-工业灯具 - 山东普瑞斯照明科技有限公司 | 干法制粒机_智能干法制粒机_张家港市开创机械制造有限公司 | 许昌奥仕达自动化设备有限公司 | 时代北利离心机,实验室离心机,医用离心机,低速离心机DT5-2,美国SKC采样泵-上海京工实业有限公司 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 体检车_移动CT车_CT检查车_CT车_深圳市艾克瑞电气有限公司移动CT体检车厂家-深圳市艾克瑞电气有限公司 | 工业废水处理|污水处理厂|废水治理设备工程技术公司-苏州瑞美迪 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 美能达分光测色仪_爱色丽分光测色仪-苏州方特电子科技有限公司 | 纸布|钩编布|钩针布|纸草布-莱州佳源工艺纸布厂 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 网站制作优化_网站SEO推广解决方案-无锡首宸信息科技公司 | 氧化铁红厂家-淄博宗昂化工 | 成都软件开发_OA|ERP|CRM|管理系统定制开发_成都码邻蜀科技 |