一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 一篇文章帶你搞懂Java restful 接口開發

一篇文章帶你搞懂Java restful 接口開發

2022-03-01 00:53BJT Java教程

這篇文章主要介紹了Java restful 接口開發的幾種方式(HTTPS),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1、RESTful 簡介

REST:Representational State Transfer,表現層資源狀態轉移。

a>資源

資源是一種看待服務器的方式,即,將服務器看作是由很多離散的資源組成。每個資源是服務器上一個可命名的抽象概念。因為資源是一個抽象的概念,所以它不僅僅能代表服務器文件系統中的一個文件、數據庫中的一張表等等具體的東西,可以將資源設計的要多抽象有多抽象,只要想象力允許而且客戶端應用開發者能夠理解。與面向對象設計類似,資源是以名詞為核心來組織的,首先關注的是名詞。一個 資源可以由一個或多個 URI 來標識。URI 既是資源的名稱,也是資源在 Web 上的地址。對某個資源感興趣的客戶端應用,可以通過資源的 URI 與其進行交互。

b>資源的表述

資源的表述是一段對于資源在某個特定時刻的狀態的描述。可以在客戶端-服務器端之間轉移(交換)。資源的表述可以有多種格式,例如 HTML/XML/JSON/純文本/圖片/視頻/音頻等等。資源的表述格式可以通過協商機制來確定。請求-響應方向的表述通常使用不同的格式。

c>狀態轉移

狀態轉移說的是:在客戶端和服務器端之間轉移(transfer)代表資源狀態的表述。通過轉移和操作資源的表述,來間接實現操作資源的目的。

 

2、RESTful 的實現

具體說,就是 HTTP 協議里面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。

它們分別對應四種基本操作:GET 用來獲取資源,POST 用來新建資源,PUT 用來更新資源,DELETE 用來刪除資源。

REST 風格提倡 URL 地址使用統一的風格設計,從前到后各個單詞使用斜杠分開,不使用問號鍵值對方式攜帶請求參數,而是將要發送給服務器的數據作為 URL 地址的一部分,以保證整體風格的一致性。

操作 傳統方式 REST 風格
查詢操作 getUserById?id=1 user/1-->get 請求方式
保存操作 saveUser user-->post 請求方式
刪除操作 deleteUser?id=1 user/1-->delete 請求方式
更新操作 updateUser user-->put 請求方式

 

3、HiddenHttpMethodFilter

由于瀏覽器只支持發送 get 和 post 方式的請求,那么該如何發送 put 和 delete 請求呢?

SpringMVC 提供了HiddenHttpMethodFilter幫助我們將 POST 請求轉換為 DELETE 或 PUT 請求。

HiddenHttpMethodFilter處理 put 和 delete 請求的條件:

  • 當前請求的請求方式必須為 post
  • 前請求必須傳輸請求參數_method

滿足以上條件,HiddenHttpMethodFilter 過濾器就會將當前請求的請求方式轉換為請求參數_method 的值,因此請求參數_method 的值才是最終的請求方式。

在 web.xml 中注冊 HiddenHttpMethodFilter

<filter>
  <filter-name>HiddenHttpMethodFilter</filter-name>
  <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filterclass>
</filter>
<filter-mapping>
  <filter-name>HiddenHttpMethodFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

使用注意:

目前為止,SpringMVC 中提供了兩個過濾器:CharacterEncodingFilter 和 HiddenHttpMethodFilter

在 web.xml 中注冊時,必須先注冊 CharacterEncodingFilter,再注冊 HiddenHttpMethodFilter

原因:

在 CharacterEncodingFilter 中通過 request.setCharacterEncoding(encoding) 方法設置字符集的

request.setCharacterEncoding(encoding) 方法要求前面不能有任何獲取請求參數的操作而 HiddenHttpMethodFilter 恰恰有一個獲取請求方式的操作:

String paramValue = request.getParameter(this.methodParam);

 

4、RESTful 案例

4.1、需求

通過 restfull 實現用戶的增刪改查,需要提供 5 個接口。

接口 method 描述
/user/list GET 獲取用戶列表
/user/{userId} GET 根據用戶 id 獲取用戶信息
/user POST 新增用戶信息
/user PUT 保存用戶信息
/user/{userId} DELETE 刪除用戶信息

4.2、git 代碼位置

https://gitee.com/javacode2018/springmvc-series

一篇文章帶你搞懂Java restful 接口開發

4.3、UserController

UserController 中實現了需求中提到的 4 個接口,大家重點看下每個接口的方法上用到的注解。

@RestController
public class UserController {
  private List<User> userList = new ArrayList<>();

  {
      userList.add(new User(1, "Spring高手系列"));
      userList.add(new User(2, "SpringMVC系列"));
  }

  @GetMapping("/user/list")
  public List<User> list() {
      System.out.println("list()");
      return userList;
  }

  @GetMapping("/user/{userId}")
  public User getUser(@PathVariable("userId") Integer userId) {
      System.out.println("getUser()");
      for (User user : userList) {
          if (user.getUserId().equals(userId)) {
              return user;
          }
      }
      return null;
  }

  @PostMapping(value = "/user", produces = "text/html;charset=UTF-8")
  public String add(User user) {
      System.out.println("add()");
      this.userList.add(user);
      return "新增成功";
  }

  @PutMapping(value = "/user", produces = "text/html;charset=UTF-8")
  public String modify(User user) {
      System.out.println("modify()");
      for (User item : userList) {
          if (item.getUserId().equals(user.getUserId())) {
              item.setName(user.getName());
          }
      }
      return "修改成功";
  }

  @DeleteMapping(value = "/user/{userId}", produces = "text/html;charset=UTF-8")
  public String delete(@PathVariable("userId") Integer userId) {
      System.out.println("delete()");
      Iterator<User> iterator = userList.iterator();
      while (iterator.hasNext()) {
          User user = iterator.next();
          if (user.getUserId().equals(userId)) {
              iterator.remove();
          }
      }
      return "刪除成功";
  }


  public static class User {
      private Integer userId;
      private String name;

      public User() {
      }

      public User(Integer userId, String name) {
          this.userId = userId;
          this.name = name;
      }

      public Integer getUserId() {
          return userId;
      }

      public void setUserId(Integer userId) {
          this.userId = userId;
      }

      public String getName() {
          return name;
      }

      public void setName(String name) {
          this.name = name;
      }

      @Override
      public String toString() {
          return "User{" +
                  "userId=" + userId +
                  ", name='" + name + '\'' +
                  '}';
      }
  }
}

4.4、添加 HiddenHttpMethodFilter

HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();

一篇文章帶你搞懂Java restful 接口開發

4.5、測試效果

將項目發布到 tomcat,如下圖,跑一下 UserController.http 中的 5 個用例,點擊每個用戶中的綠色箭頭即可運行,注意下后面 3 個用例都是 POST 方式提交的,但是參數中多了一個_method 參數用來指定提交的類型,這個參數會被HiddenHttpMethodFilter 解析。

一篇文章帶你搞懂Java restful 接口開發

 

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/likun557/article/details/120928750

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女草b | 国产免费资源高清小视频在线观看 | 精品成人片深夜 | 国产一级毛片潘金莲的奶头 | 欧美一级特黄特色大片免费 | tobu8中国在线观看免费视频 | 女人把扒开给男人爽 | 日本性爱 | b站免费网站入口 | 亚洲人成综合在线播放 | 精品国产三级av在线 | 色999| 日韩成片 | 日本免费三片在线观看 | 四虎影院久久 | 欧美最猛性xxxxx短视频 | 日韩精品特黄毛片免费看 | 搡60一70岁的老女人小说 | 日韩视频免费一区二区三区 | 亚洲精品精品一区 | 网友自拍偷拍 | 国产精品免费视频一区一 | 日本又黄又裸一级大黄裸片 | 亚洲AV无码专区国产精品麻豆 | 日本免费观看的视频在线 | chinese国产人妖hd | 99热这里只有精品免费 | 欧美国产精品 | 国产精品美女久久久久 | 日本男男gaygays | 日本加勒比无码av | 国产成人综合网 | 91麻豆精东果冻天美传媒老狼 | 2018久久精品热在线观看 | 欧美一区二区日韩一区二区 | 狠狠插综合网 | 成人资源在线观看 | 午夜A级理论片左线播放 | 非洲一级毛片又粗又长aaaa | 无码乱人伦一区二区亚洲一 | 美女污视频在线观看 |