欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單了解SpringBoot HATEOAS使用方法

 更新時(shí)間:2019年10月28日 17:00:43   作者:smileNicky  
這篇文章主要介紹了簡單了解SpringBoot HATEOAS使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

REST風(fēng)格簡介

介紹HATEOAS之前先簡單介紹一下REST,REST 是 Representational state transfer 的縮寫,翻譯過來的意思是表達(dá)性狀態(tài)轉(zhuǎn)換。REST是一種架構(gòu)的風(fēng)格

Richardson Maturity Model

Richardson 提出了REST一種 成熟度模型,我們稱之為Richardson Maturity Model,這種模式將REST按照成熟度劃分為4個(gè)等級

  • Level0:使用HTTP作為WEB服務(wù)的傳輸方式,以REST樣式公開SOAP Web服務(wù)
  • Level1:使用適當(dāng)?shù)腢RI(使用名詞)公開資源,這種方式提出了資源的概念
  • Level2:資源使用正確的URI + HTTP方法,比如更新用戶就用put方式,查詢用get方式
  • Level3:使用HATEOAS(作為應(yīng)用程序狀態(tài)引擎的超媒體),在資源的表達(dá)中包含了鏈接信息,客戶端可以在鏈接信息中發(fā)現(xiàn)可以執(zhí)行的操作

HATEOAS是什么?

HATEOAS代表“超媒體是應(yīng)用程序狀態(tài)的引擎”

從前言我們已經(jīng)可以清楚知道,使用HATEOAS約束是REST風(fēng)格中成熟度最高的,也是官方推薦的一種方式,沒使用HATEOAS的項(xiàng)目,服務(wù)端和客戶端是耦合的,客戶端只能通過相關(guān)文檔來知道服務(wù)端做了什么修改,使用HATEOAS約束的REST服務(wù),服務(wù)端修改接口信息后,客戶端可以通過服務(wù)器提供的資源的表達(dá)來智能地發(fā)現(xiàn)可以執(zhí)行的操作,客戶端不需要做啥修改,因?yàn)橘Y源信息是會動態(tài)改變的

在Spring的官網(wǎng),已經(jīng)有提供這個(gè)項(xiàng)目的相關(guān)文檔,鏈接:https://spring.io/projects/spring-hateoas

SpringBoot HATEOAS

SpringBoot中也有集成HATEOAS,本博客介紹一下如何使用

工具準(zhǔn)備:

  • JDK8.0
  • Maven 3.0+構(gòu)建工具
  • Eclipse或者IntelliJ IDEA
  • git&gitlab

Maven相關(guān)配置

在pom.xml加上hateoas配置

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>

因?yàn)槭且獙憘€(gè)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>

實(shí)體類實(shí)現(xiàn)ResourceSupport

Model類實(shí)現(xiàn)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;
  }
}
....

接口調(diào)用,基于HATEOAS模式

@GetMapping("/findBySysUserId/{userId}")
  public SysUserInfo findBySysUserId(@PathVariable("userId") long userId) {
    if (LOG.isInfoEnabled()) {
      LOG.info("請求參數(shù)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();
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaWeb之會話技術(shù)案例詳解

    JavaWeb之會話技術(shù)案例詳解

    這篇文章主要介紹了JavaWeb之會話技術(shù)案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Java從服務(wù)端下載Excel模板文件的兩種方法

    Java從服務(wù)端下載Excel模板文件的兩種方法

    這篇文章主要為大家詳細(xì)介紹了Java從服務(wù)端下載Excel模板文件的兩種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Springboot微服務(wù)打包Docker鏡像流程解析

    Springboot微服務(wù)打包Docker鏡像流程解析

    這篇文章主要介紹了Springboot微服務(wù)打包Docker鏡像流程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot整合ES多個(gè)精確值查詢 terms功能實(shí)現(xiàn)

    SpringBoot整合ES多個(gè)精確值查詢 terms功能實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot整合ES多個(gè)精確值查詢 terms功能實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • 一文帶你了解Java選擇排序的原理與實(shí)現(xiàn)

    一文帶你了解Java選擇排序的原理與實(shí)現(xiàn)

    選擇排序:(Selection sort)是一種簡單直觀的排序算法,也是一種不穩(wěn)定的排序方法。本文主要為大家介紹一下選擇排序的原理與實(shí)現(xiàn),希望對大家有所幫助
    2022-11-11
  • java設(shè)計(jì)模式--七大原則詳解

    java設(shè)計(jì)模式--七大原則詳解

    本篇文章主要對Java中的設(shè)計(jì)模式如,創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式以及7大原則進(jìn)行了歸納整理,需要的朋友可以參考下,希望能給你帶來幫助
    2021-07-07
  • SpringBoot集成mybatis連接oracle的圖文教程

    SpringBoot集成mybatis連接oracle的圖文教程

    這篇文章主要介紹了Spring Boot集成mybatis連接oracle的圖文教程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • @JsonFormat 實(shí)現(xiàn)日期格式自動格式化

    @JsonFormat 實(shí)現(xiàn)日期格式自動格式化

    這篇文章主要介紹了@JsonFormat 實(shí)現(xiàn)日期格式自動格式化,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java虛擬機(jī)工作原理

    Java虛擬機(jī)工作原理

    本文主要介紹了Java虛擬機(jī)的工作原理。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • Spring BeanPostProcessor源碼示例解析

    Spring BeanPostProcessor源碼示例解析

    這篇文章主要為大家介紹了Spring BeanPostProcessor源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評論