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@GeneratedValueprivate 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(){}@JsonCreatorpublic 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();}

实例代码:github链接下载

SpringBoot HATEOAS用法简介相关推荐

  1. SpringBoot HATEOAS用法简介(入门)

    REST风格简介 介绍HATEOAS之前先简单介绍一下REST,REST 是 Representational state transfer 的缩写,翻译过来的意思是表达性状态转换.REST是一种架构 ...

  2. SpringBoot系列之HATEOAS用法简介

    REST风格简介 介绍HATEOAS之前先简单介绍一下REST,REST 是 Representational state transfer 的缩写,翻译过来的意思是表达性状态转换.REST是一种架构 ...

  3. MSSQL Sql加密函数 hashbytes 用法简介

    原文:MSSQL Sql加密函数 hashbytes 用法简介 转自:http://www.maomao365.com/?p=4732 一.mssql sql hashbytes 函数简介 hashb ...

  4. SpringBoot常用配置简介

    SpringBoot常用配置简介 1. SpringBoot中几个常用的配置的简单介绍 一个简单的Spring.factories # Bootstrap components org.springf ...

  5. Postman用法简介-Http请求模拟工具

    Postman用法简介-Http请求模拟工具 在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,拿到接口后肯定都得提前测试一下,这样的话就非常需要有一个比较给力的Http请求模拟工具 ...

  6. InputStreamReader 和 OutputStreamWriter类用法简介,及演示。

    InputStreamReader 和 OutputStreamWriter类用法简介. 一.InputStreamReader类 InputStreamReader 将字节流转换为字符流.是字节流通 ...

  7. php中__FILE__常量用法简介

    php中__FILE__常量用法简介 http://blog.csdn.net/xbei07/article/details/5616020#comments出处 1.php中的__FILE__常量返 ...

  8. java test 用法,pytest基本用法简介

    1.安装pytest,打开dos窗口输入: pip install pytest 2.通过pycharm工具下载 3.创建pytest测试用例步骤 # 定义测试类 class testdivide: ...

  9. SAP Gateway与OData用法简介

    本文将分别从基础原理和实际应用两个角度介绍SAP Gateway与OData相关的知识点. 1 相关的事务代码(t-code) SEGW - SAP Gateway Service Builder / ...

最新文章

  1. VS2015编译ffmpeg 3.4.2
  2. Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字
  3. 《DBNotes:single_table访问方法、MRR多范围读取优化、索引合并》
  4. Windows Subsystem for Linux(WSL)安装emqx
  5. C++多重继承师生类复盘
  6. Win11任务栏大小怎么更改
  7. flutter ios打包_使用 Travis CI 为 Flutter 项目打包 Android/iOS 应用
  8. 冬天来了,温暖甜品热饮海报设计psd模板,勾住你的胃!
  9. lsb_release -a 查询Linux系统版本
  10. JVM垃圾收集器基本思想
  11. ERROR in Entry module not found: Error: Can‘t resolve ‘./src/index.js‘ in‘xxx.js‘
  12. Android安全之使用root权限绕过检测机制,强行自动允许应用的悬浮窗/应用后台弹出界面等权限
  13. 什么是 JScript?
  14. 博客上怎么根据搜索ID搜索其它人
  15. 许知远在吴晓波《预见2019——国运70》2018年年终演讲上的精华
  16. 大数据使磁带重获新生
  17. 如何在家利用网络副业赚钱,这三个网上副业,做好比主业更好
  18. 1. 有1,2,3,4个数字, 能组成多少个互不相同且无重复数字的三位数? 都是多少?
  19. 20172323 2017-2018-2 《程序设计与数据结构》第九周学习总结
  20. 绕过备案拦截的几种方法

热门文章

  1. S7-1200PLC与MCGS触摸屏通讯
  2. SQLite,嵌入式数据库
  3. 【NISP一级】考前必刷九套卷(四)
  4. Cassandra数据库介绍
  5. 文件服务器ipc,看图理解进程间通信IPC
  6. 【毕业季 进击的技术er】一个研二大龄青年的自白
  7. vmware装win7镜像无法装vmtools(官网补丁)
  8. 广州数控广数cnc数据采集入门一
  9. spring security 安全框架改造统一登录oauth2.0方式
  10. python破解百度网盘提取码_百度云提取码获取工具下载-获取百度云提取码下载v1.1 最新绿色版-西西软件下载...