REST风格简介
介绍HATEOAS之前先简单介绍一下REST,REST 是 Representational state transfer 的缩写,翻译过来的意思是表达性状态转换。REST是一种架构的风格
Richardson Maturity Model
Richardson 提出了REST一种 成熟度模型,我们称之为Richardson Maturity Model,这种模式将REST按照成熟度划分为4个等级
HATEOAS是什么?
HATEOAS代表“超媒体是应用程序状态的引擎”
从前言我们已经可以清楚知道,使用HATEOAS约束是REST风格中成熟度最高的,也是官方推荐的一种方式,没使用HATEOAS的项目,服务端和客户端是耦合的,客户端只能通过相关文档来知道服务端做了什么修改,使用HATEOAS约束的REST服务,服务端修改接口信息后,客户端可以通过服务器提供的资源的表达来智能地发现可以执行的操作,客户端不需要做啥修改,因为资源信息是会动态改变的
在Spring的官网,已经有提供这个项目的相关文档,链接:https://spring.io/projects/spring-hateoas
SpringBoot HATEOAS
SpringBoot中也有集成HATEOAS,本博客介绍一下如何使用
工具准备:
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(); }
实例代码:github链接下载
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
Spring Security是什么? Spring Security提供了基于Java EE的企业应用软件全面的安全服务。这里特别强调支持使用Spring框架构建的项目,Spring框架是企业软件开发Java EE方案的领导者 . 如果你还没有使用Spring来开发企业应用程序,我们热忱的鼓励你仔细的看一看。熟悉Spring特别是依赖注入原理将帮助你更快更方便的使用Spring Secirity
本文向大家介绍Highcharts入门之简介,包括了Highcharts入门之简介的使用技巧和注意事项,需要的朋友参考一下 在网页中创建一个这样的图表,你觉得会要多久? 确实需要很久很久,如果你对JavaScript不是特别熟练的话。 但是有个好消息就是如果,你使用Highcharts框架的话,可能十多行代码就能让你在页面中生成这样有特效的图表。 当然他的功能远不止这些,各种图表,打印,导出,对比
原文地址:http://truffleframework.com/docs/ Truffle是一个世界级的开发环境,测试框架,以太坊的资源管理通道,致力于让以太坊上的开发变得简单,Truffle有以下: 内置的智能合约编译,链接,部署和二进制文件的管理。 快速开发下的自动合约测试。 脚本化的,可扩展的部署与发布框架。 部署到不管多少的公网或私网的网络环境管理功能 使用EthPM&NPM提供的包管理
大家好,今天我们开始学习一个新专题 — 算法(Algorithm)。关于算法,我们日常开发中有很多应用,介绍算法的书籍也有很多,其中涉及到的知识点和信息量都很庞大,这个专题我们重点针对基于 Java 语言实现的算法设计和应用进行讲解,读者也可以自己将其扩展到其他语言的实现。本文我们主要先介绍一下算法是什么?为什么要学习算法?常用的算法有哪些? 1. 什么是算法(Algorithm)? 什么是算法呢
空白距离 TEX 将空格和制表符等空白字符视为相同的空白距离(space),多个连续的 空白字符 等同为一个空白字符, 每行开始的空白字符将被忽略, 而单个的 换行符 被视为一空格。 TEX 使用空行(两个或以上换行符)来分隔段落。如同空格一样,多个空行所起的作用和一个空行是相同的。 以下为示例代码: TEX 将空格和制表符等空白字符视为相同的空白距离(space), 多个连续的 空白字符 等
本文向大家介绍Django的Modelforms用法简介,包括了Django的Modelforms用法简介的使用技巧和注意事项,需要的朋友参考一下 简单的用了一下model_forms,觉得还是不是很好用 我是用书、出版社,作者三张表来做这个联系 首先下面这个函数是用来展示书籍信息 下面这个类就是modelform的类 下面这个函数是用来处理处理添加书籍的操作 下面这个函数是用来处理编辑书籍的 以