SpringBootHATEOAS的原理是什么

本篇文章給大家分享的是有關(guān)SpringBoot HATEOAS的原理是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

云霄網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),云霄網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為云霄上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的云霄做網(wǎng)站的公司定做!

REST風(fēng)格簡(jiǎn)介

介紹HATEOAS之前先簡(jiǎn)單介紹一下REST,REST 是 Representational state transfer 的縮寫(xiě),翻譯過(guò)來(lái)的意思是表達(dá)性狀態(tài)轉(zhuǎn)換。REST是一種架構(gòu)的風(fēng)格

Richardson Maturity Model

Richardson 提出了REST一種 成熟度模型,我們稱之為Richardson Maturity Model,這種模式將REST按照成熟度劃分為4個(gè)等級(jí)

Level0:使用HTTP作為WEB服務(wù)的傳輸方式,以REST樣式公開(kāi)SOAP Web服務(wù)  Level1:使用適當(dāng)?shù)腢RI(使用名詞)公開(kāi)資源,這種方式提出了資源的概念  Level2:資源使用正確的URI + HTTP方法,比如更新用戶就用put方式,查詢用get方式  Level3:使用HATEOAS(作為應(yīng)用程序狀態(tài)引擎的超媒體),在資源的表達(dá)中包含了鏈接信息,客戶端可以在鏈接信息中發(fā)現(xiàn)可以執(zhí)行的操作

HATEOAS是什么?

HATEOAS代表“超媒體是應(yīng)用程序狀態(tài)的引擎”

從前言我們已經(jīng)可以清楚知道,使用HATEOAS約束是REST風(fēng)格中成熟度最高的,也是官方推薦的一種方式,沒(méi)使用HATEOAS的項(xiàng)目,服務(wù)端和客戶端是耦合的,客戶端只能通過(guò)相關(guān)文檔來(lái)知道服務(wù)端做了什么修改,使用HATEOAS約束的REST服務(wù),服務(wù)端修改接口信息后,客戶端可以通過(guò)服務(wù)器提供的資源的表達(dá)來(lái)智能地發(fā)現(xiàn)可以執(zhí)行的操作,客戶端不需要做啥修改,因?yàn)橘Y源信息是會(huì)動(dòng)態(tài)改變的

在Spring的官網(wǎng),已經(jīng)有提供這個(gè)項(xiàng)目的相關(guān)文檔,鏈接:https://spring.io/projects/spring-hateoas

SpringBoot HATEOAS

SpringBoot中也有集成HATEOAS,本博客介紹一下如何使用

工具準(zhǔn)備:

JDK8.0  Maven 3.0+構(gòu)建工具  Eclipse或者IntelliJ IDEA  git&gitlab

Maven相關(guān)配置

在pom.xml加上hateoas配置

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

因?yàn)槭且獙?xiě)個(gè)web簡(jiǎn)單curd例子,其它需要的也加上

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-hateoas</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.25</version> </dependency> <dependency> <groupId>MySQL</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion>  <groupId>org.junit.vintage</groupId>  <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency>

實(shí)體類實(shí)現(xiàn)ResourceSupport

Model類實(shí)現(xiàn)hateoas提供的ResourceSuppor

import com.fasterxml.jackson.annotation.JsonCreator;import com.fasterxml.jackson.annotation.JsonProperty;import org.springframework.hateoas.ResourceSupport;import javax.persistence.*;import java.io.Serializable;@Entity@Table(name="sys_user")public class SysUserInfo extends ResourceSupport implements Serializable{ @Id @GeneratedValue private Long userId; @Column(unique=true,length=20,nullable=false) private String username; @Column(length=2,nullable=true) private String sex; @Column(length=10,nullable=true) private String password; public SysUserInfo(){ } @JsonCreator public SysUserInfo(@JsonProperty("userId")Long userId,@JsonProperty("username")String username,      @JsonProperty("sex")String sex,@JsonProperty("password")String password){  this.userId = userId;  this.username = username;  this.sex = sex;  this.password = password; }}....

接口調(diào)用,基于HATEOAS模式

@GetMapping("/findBySysUserId/{userId}") public SysUserInfo findBySysUserId(@PathVariable("userId") long userId) {  if (LOG.isInfoEnabled()) {   LOG.info("請(qǐng)求參數(shù)userId : {}" , userId);  }  Optional<SysUserInfo> sysUserInfo = Optional.ofNullable(sysUserRepository.findByUserId(userId));  if (!sysUserInfo.isPresent()) {   throw new NotFoundException("查詢不到用戶信息! userId:"+userId);  }  //Resource<SysUserInfo> resource = new Resource<SysUserInfo>(sysUserInfo.get());  ControllerLinkBuilder linkBuilder = linkTo(methodOn(this.getClass()).findBySysUserId(userId));  sysUserInfo.get().add(linkBuilder.withRel("findBySysUserId"));  return sysUserInfo.get(); }

以上就是SpringBoot HATEOAS的原理是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文名稱:SpringBootHATEOAS的原理是什么
文章起源:http://muchs.cn/article42/jpjjhc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、虛擬主機(jī)、移動(dòng)網(wǎng)站建設(shè)軟件開(kāi)發(fā)、搜索引擎優(yōu)化、做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)