補: Rest 風格請求處理的的內容補充(1)

Rainbow-Sea發表於2024-09-10

補: Rest 風格請求處理的的內容補充(1)

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

  1. 客戶端是PostMan 可以直接傳送Put,delete等方式請求,可不設定Filter

  2. 如果喲啊SpringBoot支援頁面表達的 Rest 功能,則需要注意如下細節:

  1. Rest 風格請求核心 Filter: HiddenHttpMethodFilter,表單請求會被 HiddenHttpMethodFilter攔截,獲取到表單_method的值,再判斷PUT/DELETE/PATCH(patch方法是新引入的,是對Put方法的補充,用來對已知資源進行區域性更新:) https://segmentfault.com/q/1010000005685904
  2. 如果要SpringBoot 支援頁面表單的Rest功能,需要在application.yml 啟用 filter功能,否則無效。
  3. 修改application.yml (resources 類路徑下) 啟用 filter 功能。

在這裡插入圖片描述

spring:
  mvc:
    hiddenmethod:
      filter:
        enabled: true # 開啟頁面表單的rest功能,啟用了HiddenHttpMethodFilter,支援rest

Rest的核心過濾器:

  1. 當前的瀏覽器只支援 post/get請求,因此為了得到 put/delete的請求方式需要提供的 HiddenHttpMethodFilter過濾器進行轉換

  2. HiddenHttpMethodFilter : 瀏覽器 form 表單只支援 get 和 post 請求,而delete,put 等method並不支援,
    spring新增了一個過濾器,可以將這些請求轉換為標準的 http 方使得支援get,post,put和delete請求

  3. HiddenHttpMethodFilter 能對 post 請求方式進行轉換,因此我們需要特別的注意這一點

  4. 這個過濾器需要在 web.xml 中配置

Spring Boot 開啟檢視解析器的 yaml 語法

spring:
  mvc:
    hiddenmethod:
      filter:
        enabled: true # 開啟頁面表單的rest功能,啟用了HiddenHttpMethodFilter,支援rest
    view: # 配置檢視解析器
      prefix: /rainbowsea/** # 這裡是需要注意,如果你配置了 static-path-pattern: /rainbowsea/** 需要保持一致
#      prefix: /rainbowsea/ 都行 # 這裡是需要注意,如果你配置了 static-path-pattern: /rainbowsea/** 需要保持一致
      suffix: .html
    static-path-pattern: /rainbowsea/**

我們這裡思考一個問題:為什麼這裡return "hello",返回的是不是字串,而是轉發到對應的資原始檔。

在這裡插入圖片描述

package com.rainbowsea.springboot.controller;


import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HiController {


    @RequestMapping("/hello")
    public String hi(){
        return "hi:):)";
    }


    @RequestMapping("/go")
    public String go(){
        return "hello";
        /*

        return 是先看檢視解析器當中是否有 hello.html 頁面,沒有就在找 controller 控制
是否有處理該請求的,如果兩者都沒有則報 404錯誤
         */
    }

}

在這裡插入圖片描述

注意:我是配置了檢視解析器的。
在這裡插入圖片描述

啟動 Spring Boot ,開啟瀏覽器輸入:http://localhost:8080/go

在這裡插入圖片描述

在這裡插入圖片描述

當 hello.html 靜態資源存在時,並沒有走 controller

我們將靜態檔案資源 hello.html 移除,再次訪問:http://localhost:8080/go

問題:

我們將靜態檔案資源 hello.html 移除,再次訪問:http://localhost:8080/go

在這裡插入圖片描述

在這裡插入圖片描述

最後:

“在這個最後的篇章中,我要表達我對每一位讀者的感激之情。你們的關注和回覆是我創作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續在其他的領域奮鬥。感謝你們,我們總會在某個時刻再次相遇。”

在這裡插入圖片描述

相關文章