Rest 優雅的url請求處理風格及注意事項

😀前言
本篇博文是關于Rest 風格請求的應用和注意事項,希望能夠幫助到您😊

🏠個人主頁:晨犀主頁
🧑個人簡介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動力😉😉
💕歡迎大家:這里是CSDN,我總結知識的地方,歡迎來到我的博客,感謝大家的觀看🥰
如果文章有什么需要改進的地方還請大佬不吝賜教 先在此感謝啦😊

文章目錄

  • Rest 風格請求處理
    • 基本介紹
    • SpringBoot Rest 風格應用實例
      • 應用實例
    • Rest 風格請求-注意事項和細節
        • 注意
        • 小細節:思考
        • 解讀:
    • 😄總結

Rest 風格請求處理

基本介紹

在這里插入圖片描述

REST:即Representational State Transfer。(資源)表現層狀態轉化。是目前流行的請求方式。它結構清晰, 很多網站采用

  1. Rest 風格支持(使用HTTP 請求方式動詞來表示對資源的操作)
  2. 舉例說明:
    ● 請求方式: /monster
    ● GET-獲取怪物
    ● DELETE-刪除怪物
    ● PUT-修改怪物
    ● POST-保存妖怪

SpringBoot Rest 風格應用實例

需求: 演示SpringBoot 中如何實現Rest 風格的增刪改查

image-20230811143826801

應用實例

1.創建com/nlc/web/controller/MonsterController.java

@RestController
//@Controller
public class MonsterController {//等價的寫法//@RequestMapping(value = "/monster",method = RequestMethod.GET)@GetMapping("/monster")public String getMonster() {return "GET-查詢妖怪";}//等價寫法//@RequestMapping(value = "/monster", method = RequestMethod.POST)@PostMapping("/monster")public String saveMonster() {return "POST-添加妖怪";}//等價寫法//@RequestMapping(value = "/monster",method = RequestMethod.PUT)@PutMapping("/monster")public String putMonster() {return "PUT-修改妖怪~~";}//等價寫法//@RequestMapping(value = "/monster", method = RequestMethod.DELETE)@DeleteMapping("/monster")public String delMonster() {return "DELETE-刪除妖怪";}}
  1. 使用Postman 完成測試, 請求url: http://localhost:8080/monster

image-20230811144036629

Rest 風格請求-注意事項和細節

1、客戶端是PostMan 可以直接發送Put、delete 等方式請求,可不設置Filter
2、如果要SpringBoot 支持頁面表單的Rest 功能, 則需要注意如下細節

注意

  1. Rest 風格請求核心Filter :HiddenHttpMethodFilter:瀏覽器form 表單只支持GET 與POST 請求,而DELETE、PUT等method 并不支持,Spring 添加了一個過濾器,可以將這些請求轉換為標準的http 方法,使得支持GET、POST、PUT 與DELETE 請求。
  2. 、HiddenHttpMethodFilter 在將post 轉成delete / put 請求時,是按_method 參數名來讀取的。
  3. 表單請求會被HiddenHttpMethodFilter 攔截, 獲取到表單_method 的值, 再判斷是PUT/DELETE/PATCH(注釋: PATCH 方法是新引入的,是對PUT 方法的補充,用來對已知資源進行局部更新:https://segmentfault.com/q/1010000005685904)。
  4. 如果要SpringBoot 支持頁面表單的Rest 功能, 需要在application.yml 啟用filter 功能,否則無效。
  5. 修改application.yml 啟用filter 功能。
spring:mvc:static-path-pattern: /res/** #修改靜態資源訪問的路徑/前綴hiddenmethod:filter:enabled: true #啟用了HiddenHttpMethodFilter,開啟頁面表單的Rest功能web:resources:#修改/指定 靜態資源的訪問路徑/位置static-locations: ["classpath:/img/","classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/"]#String[] staticLocations
  1. 修改對應的頁面, 自己測試即可.
  • 創建src\main\resources\public\rest.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>rest</title>
</head>
<body>
<h1>測試rest風格的url, 來完成請求.</h1>
<form action="/monster" method="post">u: <input type="text" name="name"><br/><!--    通過隱藏域傳遞_method 參數指定值--><!--如果要測試delete, put , 就打開下面的注釋--><!-- <input type="hidden" name="_method" value="delete">--><input type="submit" value="點擊提交">
</form>
</body>
</html>
  1. 完成測試, 注意url 是localhost:8080/res/rest.html, 如果希望url 是localhost:8080/rest.html, 將application.yml 文件的static-path-pattern: /res/** 注銷即可

image-20230811163618503

image-20230811164100098

小細節:思考

為什么這里return “GET-查詢妖怪”, 返回的是字符串, 而不是轉發到對應的資源文件?

解讀:

因為@ResController 是一個復合注解, 含有@ResponseBody, 所以springboot 底層(springmvc), 在處理return “xxx” 時, 會以@ResponseBody 注解進行解析處理, 即返回字符串"xxx", 而不會使用視圖解析器來處理。
我們可以試一下, 如果我們把@RestController 改成@Controller , 當你訪問getMonster() 時, 如果你有xxx.html就會轉發到xxx.html , 如果沒有xxx.html , 就會報404。
提示: 在測試時, 將xxx.html 放在main\resources\public\xxx.html 進行測試, 并在application.yml 配置視圖解析器

@GetMapping("/monster")
public String getMonster() {return "GET-查詢妖怪";
}

—在application.yml 配置解析器-----

spring:mvc:view:suffix: .html   #后綴prefix: /    #前綴

—提示: 測試完后, 把代碼恢復原狀-----

使用Postman 進行測試, 可能出現的問題和解決方案分析.

image-20230811165122138

如何解決

spring:mvc:
#    static-path-pattern: /res/** #修改靜態資源訪問的路徑/前綴hiddenmethod:filter:enabled: true #啟用了HiddenHttpMethodFilter,開啟頁面表單的Rest功能view:       #配置視圖解析器suffix: .htmlprefix: /        #這里是需要注意 prefix需要和當前的static-path-pattern一致。如果不一致就無法訪問到靜態資源

😄總結

  1. 不含有@ResponseBody時, springboot 底層(springmvc) 在處理return “xxx” 時是有順序的。
  2. 如果配置了視圖解析器,就按照視圖解析器來定位;如果沒有配置視圖解析器,就看controller有沒有/xxx
  3. HiddenHttpMethodFilter 在將post 轉成delete / put 請求時,是按_method 參數名來讀取的。

😁熱門專欄推薦
SpringBoot篇
SpringBoot容器–注解的使用
以數據為中心的標記語言–yaml
SpringBoot 自動配置–常用配置
Spring Boot介紹–快速入門–約定優于配置
安裝Lombok–Lombok的常用注解說明及使用方法
SpringBoot 依賴管理和自動配置—帶你了解什么是版本仲裁

文章到這里就結束了,如果有什么疑問的地方請指出,諸大佬們一起來評論區一起討論😁
希望能和諸大佬們一起努力,今后我們一起觀看感謝您的閱讀🍻
如果幫助到您不妨3連支持一下,創造不易您們的支持是我的動力🤞

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37880.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37880.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37880.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

應急響應-Webshell

文章目錄 一、Webshell概述什么是WebshellWebshell分類基于編程語言基于文件大小/提供的功能多少 Webshell 檢測方法 二、常規處置方法三、技術指南1、初步預判2、 Webshell排查3、Web日志分析&#xff08;查找攻擊路徑及失陷原因&#xff09;4、系統排查4.1 Windows4.2 Linux …

CSS中的position屬性有哪些值,并分別描述它們的作用。

聚沙成塔每天進步一點點 ? 專欄簡介? static? relative? absolute? fixed? sticky? 寫在最后 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 歡迎來到前端入門之旅&#xff01;這個專欄是為那…

通達OA SQL注入漏洞【CVE-2023-4166】

通達OA SQL注入漏洞【CVE-2023-4166】 一、產品簡介二、漏洞概述三、影響范圍四、復現環境POC小龍POC檢測工具: 五、修復建議 免責聲明&#xff1a;請勿利用文章內的相關技術從事非法測試&#xff0c;由于傳播、利用此文所提供的信息或者工具而造成的任何直接或者間接的后果及損…

C/C++ 標準模版庫STL(持續更新版)

標準模版庫STL <algorithm> 算法庫 max, min 用于找出一組值中的最大值和最小值 swap 用于交換兩個變量的值 sort 用于對一個范圍內的元素進行排序 lower_bound, upper_bound 用于在已排序的容器中查找元素的下界和上界 unique(a,an)-a 用于在一個范圍內刪除相鄰重…

新的 Python URL 解析漏洞可能導致命令執行攻擊

Python URL 解析函數中的一個高嚴重性安全漏洞已被披露&#xff0c;該漏洞可繞過 blocklist 實現的域或協議過濾方法&#xff0c;導致任意文件讀取和命令執行。 CERT 協調中心&#xff08;CERT/CC&#xff09;在周五的一份公告中說&#xff1a;當整個 URL 都以空白字符開頭時&…

在 docker 中快速啟動 Apache Hive

介紹 在偽分布式模式下&#xff0c;在Docker容器內運行Apache Hive&#xff0c;可以提供以下功能&#xff1a;快速啟動/調試/為Hive準備測試環境。 快速開始 1. 拉取鏡像 從DockerHub&#xff1a;https://hub.docker.com/r/apache/hive/tags中拉取鏡像。目前發布了3個鏡像&…

gitlab修改遠程倉庫地址

目錄 背景&#xff1a; 解決&#xff1a; 1.刪除本地倉庫關聯的遠程地址&#xff0c;添加新的遠程倉庫地址 2.直接修改本地倉庫關聯的遠程倉庫地址 3.打開.git隱藏文件修改遠程倉庫地址 4.拉取代碼報錯(git host key verification failed) 背景&#xff1a; 公司搬家&#…

數字圖像處理 - 圖像處理結合機器學習的應用示例

在本文中,特別關注樹葉分類機器學習技術的實現。我們的目標是演示如何利用機器學習算法來分析一系列葉子照片,從而實現準確分類并提供對植物領域有價值的算法。 圖像處理中機器學習的本質 機器學習使計算機能夠學習模式并根據視覺數據進行預測,徹底改變了圖像處理領域。在葉…

image has dependent child images

問題&#xff1a;很多none的鏡像無法被刪除 解決過程&#xff1a; 1、通過 docker image prune -f 提示可刪除為 0 2、直接進行刪除報錯&#xff1a; docker rmi 8f5116cbc201Error response from daemon: conflict: unable to delete 8f5116cbc201 (cannot be forced) - im…

銀河麒麟安裝php7.1.33

銀河麒麟V10兼容CentOS 8 安裝過程與CentOS類似。 TencentOS3.1安裝PHPNginxredis測試系統_樂大師的博客-CSDN博客 可以參考之前我寫的文章。 不過有2個細節不同&#xff0c;下面說下。 問題1&#xff1a;編譯錯誤提示“error:off_t undefined” 解決方法&#xff1a; 編…

TCP收發信息(C++)

目錄 一、介紹 二、收數據 三、發數據 一、介紹 tcp和udp的區別之一&#xff0c;即tcp是有連接的&#xff0c;udp是無連接的&#xff0c;udp收發數據的代碼可以獨立運行&#xff0c;tcp發數據前必須確保收數據的一方是打開的&#xff0c;否則無法建立連接。 二、收數據 tc…

宋浩線性代數筆記(五)矩陣的對角化

本章的知識點難度和重要程度都是線代中當之無愧的T0級&#xff0c;對于各種雜碎的知識點&#xff0c;多做題復盤才能良好的掌握&#xff0c;良好掌握的關鍵點在于&#xff1a;所謂的性質A與性質B&#xff0c;是誰推導得誰~

MyBatis的SqlSession使用步驟

對MyBatis的SqlSession理解 SqlSession是 MyBatis 框架中的一個接口&#xff0c;用于執行與數據庫相關的操作。它提供了一系列方法&#xff0c;用于查詢、插入、更新和刪除數據等數據庫操作。 SqlSession接口是通過SqlSessionFactory創建的&#xff0c;每個SqlSession實例都代…

Ubuntu22.04復現SHADEWACHER(手動安你就慢了)

因為我是打算跑TC數據集&#xff0c;所以跳過audit安裝。 我的Ubuntu使用的是清華源。 1. Parser Setup 1.1 g apt install g1.2 neo4j Ubuntu22.04換什么源都會導致無法定位軟件包&#xff0c;添加neo4j的官方源又會導致不信任的源。 22.04以下的版本&#xff0c;直接用命…

MySQL 根據多字段查詢重復數據

MySQL 根據多字段查詢重復數據 在實際的數據庫應用中&#xff0c;我們經常需要根據多個字段來查詢重復的數據。MySQL 提供了一些方法來實現這個功能&#xff0c;讓我們能夠快速準確地找到和處理重復數據。本文將介紹如何使用 MySQL 來根據多字段查詢重復數據&#xff0c;并提供…

SIFT 算法 | 如何在 Python 中使用 SIFT 進行圖像匹配

介紹 人類通過記憶和理解來識別物體、人和圖像。你看到某件事的次數越多,你就越容易記住它。此外,每當一個圖像在你的腦海中彈出時,它就會將該項目或圖像與一堆相關的圖像或事物聯系起來。如果我告訴你我們可以使用一種稱為 SIFT 算法的技術來教機器做同樣的事情呢? 盡管…

C語言——動態內存函數(malloc、calloc、realloc、free)

了解動態內存函數 前言&#xff1a;一、malloc函數二、calloc函數三、realloc函數四、free函數 前言&#xff1a; 在C語言中&#xff0c;動態內存函數是塊重要的知識點。以往&#xff0c;我們開辟空間都是固定得&#xff0c;數組編譯結束后就不能繼續給它開辟空間了&#xff0…

貼吧照片和酷狗音樂簡單爬取

爬取的基本步驟 很簡單&#xff0c;主要是兩大步 向url發起請求 這里注意找準對應資源的url&#xff0c;如果對應資源不讓程序代碼訪問&#xff0c;這里可以偽裝成瀏覽器發起請求。 解析上一步返回的源代碼&#xff0c;從中提取想要的資源 這里解析看具體情況&#xff0c;一…

13 計算機視覺-代碼詳解

13.2 微調 為了防止在訓練集上過擬合&#xff0c;有兩種辦法&#xff0c;第一種是擴大訓練集數量&#xff0c;但是需要大量的成本&#xff1b;第二種就是應用遷移學習&#xff0c;將源數據學習到的知識遷移到目標數據集&#xff0c;即在把在源數據訓練好的參數和模型&#xff…

淺談現代醫院手術室IT供配電系統的設計與研究

安科瑞 華楠 &#xff3b;摘要&#xff3d; 隨著人們的生活水平的不斷提高&#xff0c;醫療條件的不斷改善&#xff0c;人們對健康越來越重視同時對醫療條件的要求也越來越高&#xff0c;對醫院手術室醫療設施提出了新的要求。以往醫院普通手術室狀況已不能滿足人們的要求&…