简单了解SpringBoot HATEOAS使用方法

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();
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Springboot事务管理

    在Spring Boot事务管理中,实现自接口PlatformTransactionManager. public interface PlatformTransactionManager { org.springframework.transaction.TransactionStatus getTransaction(org.springframework.transaction.TransactionDefinition transactionDefinition) throws org.

  • SpringBoot HATEOAS用法简介(入门)

    REST风格简介 介绍HATEOAS之前先简单介绍一下REST,REST 是 Representational state transfer 的缩写,翻译过来的意思是表达性状态转换.REST是一种架构的风格 Richardson Maturity Model Richardson 提出了REST一种 成熟度模型,我们称之为Richardson Maturity Model,这种模式将REST按照成熟度划分为4个等级 Level0:使用HTTP作为WEB服务的传输方式,以REST样式公开SOAP

  • 详解spring boot引入外部jar包的坑

    前言:由于项目需求,短信验证码的接口需要换成阿里大于的,但是尴尬的发现阿里大于的jar包没有maven版本的,于是便开始了一上午的操蛋引包之路.按照套路来说,自然应该是百度一波,但是百度了好久,找了好多方案之后发现,没一个有用的,而且文章的抄袭.拷贝十分严重,试了N种方案,都是错的,都没有将外部jar包打包到BOOK-INF文件夹下.最终,在第N次尝试之后,终于在打的jar包里将外部的jar包导入进来.特此记录下,防止再犯!!! 首先在新建libs文件夹(根目录或者resource目录下都可以)

  • SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    最近在项目中遇到了这样一个问题:前后端分离,前端用Vue来做,所有的数据请求都使用vue-resource,没有使用表单,因此数据交互都是使用JSON,后台使用Spring Boot,权限验证使用了Spring Security,因为之前用Spring Security都是处理页面的,这次单纯处理Ajax请求,因此记录下遇到的一些问题.这里的解决方案不仅适用于Ajax请求,也可以解决移动端请求验证. 创建工程 首先我们需要创建一个Spring Boot工程,创建时需要引入Web.Spring S

  • SpringBoot配置SwaggerUI访问404错误的解决方法

    SpringBoot 配置SwaggerUI 访问404的小坑. 在学习SpringBoot构建Restful API的时候遇到了一个小坑,配置Swagger UI的时候无法访问. 首先在自己的pom文件中加入Swagger的依赖,如下所示: <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version&

  • springboot整合mybatis将sql打印到日志的实例详解

    在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢? 见下面的mybatis配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-

  • 在SpringBoot下读取自定义properties配置文件的方法

    SpringBoot工程默认读取application.properties配置文件.如果需要自定义properties文件,如何读取呢? 一.在resource中新建.properties文件 在resource目录下新建一个config文件夹,然后新建一个.properties文件放在该文件夹下.如图remote.properties所示 二.编写配置文件 remote.uploadFilesUrl=/resource/files/ remote.uploadPicUrl=/resource

  • 简单了解SpringBoot HATEOAS使用方法

    REST风格简介 介绍HATEOAS之前先简单介绍一下REST,REST 是 Representational state transfer 的缩写,翻译过来的意思是表达性状态转换.REST是一种架构的风格 Richardson Maturity Model Richardson 提出了REST一种 成熟度模型,我们称之为Richardson Maturity Model,这种模式将REST按照成熟度划分为4个等级 Level0:使用HTTP作为WEB服务的传输方式,以REST样式公开SOAP

  • 在SpringBoot中使用HATEOAS的方法

    目录 简介 文章目标 构建Entity和Repository 构建HATEOAS相关的RepresentationModel 构建Controller HATEOAS的意义 简介 HATEOAS是实现REST规范的一种原则,通过遵循HATEOAS规范,可以解决我们实际代码实现的各种个问题.作为java最流行的框架Spring当然也会不缺席HATEOAS的集成. 本文将会通过一个具体的例子来讲解如何在SpringBoot中使用HATEOAS. 文章目标 HATEOAS规则中,返回的数据会带有链接.

  • 如何运行SpringBoot项目的方法

    最近在Ecplise上面写了一个简单的Spring Boot的测试项目,Spring Boot里面是有主函数的: 我们知道的是在Ecplise上面找到这个主函数然后run as->java Application 就可以了 但是总不能一直不脱离Ecplise,总要出来自己单练的 第一步:我就新建的一个文件夹boottest,然后右键导出整个工程: 导出的是jar包,然后我们看网上介绍的SpringBoot启动的方法,就兴致勃勃的去启动SpringBoot 第二步:将导出的jar包解压到我刚才创建

  • idea新建springboot项目的方法

    不多说废话,直接进入正题,按照下面的步骤创建一个springboot项目一般不会出错,当然不排除可能会有一些脸黑的,不过应该问题不大. 第一步,如果你是在已有的项目里面,新建一个springboot项目 如果你们是在idea打开后没有项目打开创建项目,那就比较简单了,当然你也可以这样回退到选择打开项目的主页面 然后你看到的就是这样子的 点击它,你就进入到创建项目的页面这就正式进入第二步了,你会发现有很多的项目模板,看接下来的操作: 说明一下,那个jdk可以选择自己电脑的,不会安装的网上有很多教程

  • 使用IDEA搭建一个简单的SpringBoot项目超详细过程

    一.创建项目 1.File->new->project: 2.选择"Spring Initializr",点击next:(jdk1.8默认即可) 3.完善项目信息,组名可不做修改,项目名可做修改:最终建的项目名为:test,src->main->java下包名会是:com->example->test:点击next: 4.Web下勾选Spring Web Start,(网上创建springboot项目多是勾选Web选项,而较高版本的Springboo

  • Gitlab CI-CD自动化部署SpringBoot项目的方法步骤

    目录 一.概述 二.前期准备 三.总体架构图 四.环境搭建 1.环境准备(可选) 2.Gitlab安装 3.安装 Runner 4.安装应用服务器环境 五.创建 SpringBoot 项目 1.使用Gitlab Spring 模板快速创建一个 SpringBoot 项目: 2.添加环境变量(登录应用服务器密码) 六.总结 一.概述 本文主要记录如何通过Gitlab CI/CD自动部署SpringBoot项目jar包. 二.前期准备 准备三台 CentOS7服务器,分别部署以下服务: 序号 系统

  • Jenkins一键打包部署SpringBoot应用的方法步骤

    目录 Jenkins简介 Jenkins的安装及配置 Docker环境下的安装 Jenkins的配置 角色权限管理 打包部署SpringBoot应用 在Jenkins中创建执行任务 任何简单操作的背后,都有一套相当复杂的机制.本文将以SpringBoot应用的在Docker环境下的打包部署为例,详细讲解如何使用Jenkins一键打包部署SpringBoot应用. Jenkins简介 Jenkins是开源CI&CD软件领导者,提供超过1000个插件来支持构建.部署.自动化,满足任何项目的需要.我们

  • springboot自定义starter方法及注解实例

    目录 SpringBoot starter 自定义starter 自定义starter步骤 实现 打包测试 注解解释 SpringBoot starter 用了springboot 那么久了居然都还没自定义过starter,想想都觉得羞愧,所以今天来玩一下. SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置.star

  • CI(CodeIgniter)简单统计访问人数实现方法 原创

    本文实例讲述了CI(CodeIgniter)简单统计访问人数实现方法.分享给大家供大家参考,具体如下: 废话不说,先上代码: 控制器文件: /application/controllers/hello.php 如下: <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Hello extends CI_Controller { public function index() { echo

随机推荐