我的一位同事使用=如下所示的路徑變數,它令人驚訝地(對我而言)有效。但是,我從未在任何教程中看到過它的示例。
@GetMapping("/getCustomFieldBy={portId}")
public ResponseEntity getMempools(@PathVariable Long portId) {
return ResponseEntity.ok(customFieldService.findByPortId(portId));
}
我希望/路徑名里面有一個。這種語法是否有名稱,或者甚至是標準的?我該如何查找?
uj5u.com熱心網友回復:
這不是一個奇怪的語法,它是=字符的有效和字面映射。這些是映射攔截的有效端點的示例:
localhost:8080/getCustomFieldBy=8009localhost:8080/getCustomFieldBy=15123
使用=. 典型的 REST 端點看起來像這樣:
localhost:8080/customField?port=8009
uj5u.com熱心網友回復:
TL;DR:它只是一個普通的 URI,設計者決定在路徑段的拼寫中包含一個等號。
此處的URI 模板描述了一個簡單的字串擴展。盡管我們經常看到占據整個路徑段的擴展(例如:/{portId}/),但這不是必需的 - 字串擴展也可用于描述路徑段的一部分。
URI 中的有效路徑段由RFC 3986定義。總結生產規則
segment = *pchar
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / " " / "," / ";" / "="
所以等號只是另一個字母,就 URI 路徑段的標準化決議而言。
Key=Value 拼寫在 URI 的查詢部分很常見;例如,這就是您在 HTML 表單將其輸入復制到 URI 中時看到的內容。
在 1990 年代,TBL 使用類似的約定來描述矩陣空間。
矩陣 URI 決議不是 Web 的功能。這只是本來可以的。-- TBL, 2001
規范示例:
//moremaps.com/map/color;lat=50;long=20;scale=32000
但是以這種方式打破鍵/值對并不意味著什么,因為我們沒有共同的理解,通用組件可以用來做一些有趣的事情。
請注意,第 3 級和第 4 級 URI 模板確實對以分號為前綴的鍵值對進行了擴展
x := "1024"
y := "768"
{;x,y} ;x=1024;y=768
keys := [("semi",";"),("dot","."),("comma",",")]
{;keys*} ;semi=;;dot=.;comma=,
與您的示例不完全匹配,它缺少前導分號。
uj5u.com熱心網友回復:
這絕不是遵循 REST 標準。
首先,路徑不應該代表命令或動作(除非真的沒有其他方法),而是代表資源。這意味著你應該避免在路徑中使用動詞,而是使用名詞。在你的情況下,類似的東西/custom-fields似乎合適。
其次,=在路徑中使用不常見或不標準。您應該只在查詢引數中使用它。
最后,在這種情況下,portId似乎并沒有成為custom-fieldsID我會建議你使用的查詢引數獲取埠ID如下:/custom-fields?port_id=123。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/344073.html
