SpringBoot HATEOAS用法简介(入门)
REST风格简介
介绍HATEOAS之前先简单介绍一下REST,REST是Representationalstatetransfer的缩写,翻译过来的意思是表达性状态转换。REST是一种架构的风格
RichardsonMaturityModel
Richardson提出了REST一种成熟度模型,我们称之为RichardsonMaturityModel,这种模式将REST按照成熟度划分为4个等级
- Level0:使用HTTP作为WEB服务的传输方式,以REST样式公开SOAPWeb服务
- Level1:使用适当的URI(使用名词)公开资源,这种方式提出了资源的概念
- Level2:资源使用正确的URI+HTTP方法,比如更新用户就用put方式,查询用get方式
- Level3:使用HATEOAS(作为应用程序状态引擎的超媒体),在资源的表达中包含了链接信息,客户端可以在链接信息中发现可以执行的操作
HATEOAS是什么?
HATEOAS代表“超媒体是应用程序状态的引擎”
从前言我们已经可以清楚知道,使用HATEOAS约束是REST风格中成熟度最高的,也是官方推荐的一种方式,没使用HATEOAS的项目,服务端和客户端是耦合的,客户端只能通过相关文档来知道服务端做了什么修改,使用HATEOAS约束的REST服务,服务端修改接口信息后,客户端可以通过服务器提供的资源的表达来智能地发现可以执行的操作,客户端不需要做啥修改,因为资源信息是会动态改变的
在Spring的官网,已经有提供这个项目的相关文档,链接:https://spring.io/projects/spring-hateoas
SpringBootHATEOAS
SpringBoot中也有集成HATEOAS,本博客介绍一下如何使用
工具准备:
- JDK8.0
- Maven3.0+构建工具
- Eclipse或者IntelliJIDEA
- git&gitlab
Maven相关配置
在pom.xml加上hateoas配置
org.springframework.boot spring-boot-starter-hateoas
因为是要写个web简单curd例子,其它需要的也加上
org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-hateoas org.springframework.boot spring-boot-starter-web com.alibaba druid 1.0.25 mysql mysql-connector-java 5.1.40 org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine
实体类实现ResourceSupport
Model类实现hateoas提供的ResourceSuppor
importcom.fasterxml.jackson.annotation.JsonCreator;
importcom.fasterxml.jackson.annotation.JsonProperty;
importorg.springframework.hateoas.ResourceSupport;
importjavax.persistence.*;
importjava.io.Serializable;
@Entity
@Table(name="sys_user")
publicclassSysUserInfoextendsResourceSupportimplementsSerializable{
@Id
@GeneratedValue
privateLonguserId;
@Column(unique=true,length=20,nullable=false)
privateStringusername;
@Column(length=2,nullable=true)
privateStringsex;
@Column(length=10,nullable=true)
privateStringpassword;
publicSysUserInfo(){
}
@JsonCreator
publicSysUserInfo(@JsonProperty("userId")LonguserId,@JsonProperty("username")Stringusername,
@JsonProperty("sex")Stringsex,@JsonProperty("password")Stringpassword){
this.userId=userId;
this.username=username;
this.sex=sex;
this.password=password;
}
}
....
接口调用,基于HATEOAS模式
@GetMapping("/findBySysUserId/{userId}")
publicSysUserInfofindBySysUserId(@PathVariable("userId")longuserId){
if(LOG.isInfoEnabled()){
LOG.info("请求参数userId:{}",userId);
}
OptionalsysUserInfo=Optional.ofNullable(sysUserRepository.findByUserId(userId));
if(!sysUserInfo.isPresent()){
thrownewNotFoundException("查询不到用户信息!userId:"+userId);
}
//Resourceresource=newResource(sysUserInfo.get());
ControllerLinkBuilderlinkBuilder=linkTo(methodOn(this.getClass()).findBySysUserId(userId));
sysUserInfo.get().add(linkBuilder.withRel("findBySysUserId"));
returnsysUserInfo.get();
}
实例代码:github链接下载
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。