您好,登錄后才能下訂單哦!
如何在SpringBoot中使用HATEOAS?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
springboot一種全新的編程規范,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程,SpringBoot也是一個服務于框架的框架,服務范圍是簡化配置文件。
REST風格簡介
介紹HATEOAS之前先簡單介紹一下REST,REST 是 Representational state transfer 的縮寫,翻譯過來的意思是表達性狀態轉換。REST是一種架構的風格
Richardson Maturity Model
Richardson 提出了REST一種 成熟度模型,我們稱之為Richardson Maturity Model,這種模式將REST按照成熟度劃分為4個等級
Level0:使用HTTP作為WEB服務的傳輸方式,以REST樣式公開SOAP Web服務
Level1:使用適當的URI(使用名詞)公開資源,這種方式提出了資源的概念
Level2:資源使用正確的URI + HTTP方法,比如更新用戶就用put方式,查詢用get方式
Level3:使用HATEOAS(作為應用程序狀態引擎的超媒體),在資源的表達中包含了鏈接信息,客戶端可以在鏈接信息中發現可以執行的操作
HATEOAS是什么?
HATEOAS代表“超媒體是應用程序狀態的引擎”
從前言我們已經可以清楚知道,使用HATEOAS約束是REST風格中成熟度最高的,也是官方推薦的一種方式,沒使用HATEOAS的項目,服務端和客戶端是耦合的,客戶端只能通過相關文檔來知道服務端做了什么修改,使用HATEOAS約束的REST服務,服務端修改接口信息后,客戶端可以通過服務器提供的資源的表達來智能地發現可以執行的操作,客戶端不需要做啥修改,因為資源信息是會動態改變的
在Spring的官網,已經有提供這個項目的相關文檔,鏈接:https://spring.io/projects/spring-hateoas
SpringBoot HATEOAS
SpringBoot中也有集成HATEOAS,本博客介紹一下如何使用
工具準備:
JDK8.0
Maven 3.0+構建工具
Eclipse或者IntelliJ IDEA
git&gitlab
Maven相關配置
在pom.xml加上hateoas配置
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-hateoas</artifactId> </dependency>
因為是要寫個web簡單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>
實體類實現ResourceSupport
Model類實現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; } } ....
接口調用,基于HATEOAS模式
@GetMapping("/findBySysUserId/{userId}") public SysUserInfo findBySysUserId(@PathVariable("userId") long userId) { if (LOG.isInfoEnabled()) { LOG.info("請求參數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的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。