SpringBoot HATEOAS用法简介(入门)

网友投稿 379 2022-12-24


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配置

org.springframework.boot

<artifactId>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

<groupId>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

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 = Optional.ofNullable(sysUserRepository.findByUserId(userId));

if (!sysUserInfo.isPresent()) {

throw new NotFoundException("查询不到用户信息! userId:"+userId);

}

//Resource resource = new Resource(sysUserInfo.get());

ControllerLinkBuilder linkBuilder = linkTo(methodOn(this.getClass()).findBySysUserId(userId));

sysUserInfo.get().add(linkBuilder.withRel("findBySysUserId"));

return sysUserInfo.get();

}

实例代码:github链接下载


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java弹幕小游戏1.0版本
下一篇:spring boot加入拦截器Interceptor过程解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~