如何在 Spring REST Controller 中獲取 HTTP 頭信息

介紹

在本篇文章中,我們將研究如何在 Spring Rest Controller 中訪問 HTTP 頭信息。

首先,我們將使用 @RequestHeader 註解分別或同時讀取 HTTP 頭信息。

之後,我們將深入研究 @RequestHeader 的屬性。

獲取 HTTP 頭信息

獲取單個 HTTP 頭信息

如果我們需要訪問一個特定的 HTTP 頭信息,我們可以用頭名配置 @RequestHeader

如何在 Spring REST Controller 中獲取 HTTP 頭信息

然後,我們可以使用傳遞給我們方法的變量來訪問該值。 如果在請求中找不到名為 accept-language 的頭信息,則該方法將返回“400 Bad Request”錯誤。

我們的頭信息不一定是字符串。例如,如果我們知道我們的頭是一個數字,我們可以聲明我們的變量為一個數字類型:

如何在 Spring REST Controller 中獲取 HTTP 頭信息

獲取多個 HTTP 頭信息

如果我們不確定會出現哪些頭文件,或者我們需要的頭文件比方法簽名中需要的多,我們可以使用 @RequestHeader 註釋,而不需要特定的名稱。

對於變量類型,我們有幾種選擇:Map,MultiValueMap 或 HttpHeaders 對象。
首先,讓我們以 Map 的形式獲取請求的頭信息:

如何在 Spring REST Controller 中獲取 HTTP 頭信息

如果我們使用 Map,並且其中一個頭信息具有多個值,則只能獲得第一個值。這等效於在 MultiValueMap 上使用 getFirst() 方法。

如果我們的頭信息可能有多個值,我們可以將它們作為 MultiValueMap 進行獲取:

如何在 Spring REST Controller 中獲取 HTTP 頭信息

我們還可以將 headers 作為 HttpHeaders 對象獲取:

如何在 Spring REST Controller 中獲取 HTTP 頭信息

當我們從 Map,MultiValueMap 或 HttpHeaders 對象中按名稱訪問頭信息時,如果不存在則返回空。

@RequestHeader 屬性

現在,我們已經瞭解了使用 @RequestHeader 註解獲取請求頭的基礎知識,讓我們仔細看一下其屬性。

當我們指定 Header 時,我們已經隱式地使用了 name 或 value 屬性:

如何在 Spring REST Controller 中獲取 HTTP 頭信息

我們可以通過使用 name 屬性來完成同樣的事情:

如何在 Spring REST Controller 中獲取 HTTP 頭信息

接下來,讓我們以完全相同的方式使用 value 屬性:

如何在 Spring REST Controller 中獲取 HTTP 頭信息

當我們指定獲取一個頭信息時,默認情況下該頭信息是必需的。如果在請求中沒有找到該頭信息,控制器將返回一個 400 錯誤。

我們可以使用 required 屬性來表示我們的頭不是必需的:

如何在 Spring REST Controller 中獲取 HTTP 頭信息

如果該頭信息在請求頭中不存在,則變量將為 null,因此確保程序能夠正常運行,我們進行適當的空值檢查。

讓我們使用 defaultValue 屬性為頭信息提供默認值:

如何在 Spring REST Controller 中獲取 HTTP 頭信息

結束語

在這個簡短的教程中,我們學習瞭如何在 Spring REST Controllers 中訪問請求頭。首先,我們使用 @RequestHeader 註解為 Controller 方法獲取請求頭。

在瞭解了基礎知識之後,我們詳細研究了 @RequestHeader 註解的屬性。

感謝大家的觀看,歡迎關注我的頭條號。


分享到:


相關文章: