激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

服務器之家 - 編程語言 - Java教程 - Spring中的PathVariable注釋解析

Spring中的PathVariable注釋解析

2022-02-28 00:44zenglintao Java教程

這篇文章主要介紹了Spring中的PathVariable注釋用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring的PathVariable注釋

就像@RequestParam一樣,@PathVariable批注用于從HTTP request中提取數據。但是,它們略有不同。區別在于@RequestParam從URL獲取參數,而@PathVariable只是從URI中提取參數。

例子

讓我們假設你有一個以下 URL 的網站:

http://www.yourwebsite.net/employee/1

上面 URL 中的1表示雇員的 ID。 到目前為止一切ok。 但是現在,從 Spring 控制器看,路徑看起來是這樣的(取決于您給 id 的名稱) :

?
1
/employee/{id}

上面的 URL 路徑對我們有什么幫助? 因為這個{}語法(碰巧被稱為 URI 模板) ,你現在可以把它傳遞給一個使用@pathvariable 的方法,你的方法和注釋看起來如下所示:

?
1
2
@RequestMapping(value="/employee/{id}", method=RequestMethod.GET)
<Access Modifier> <Return Type> <Method Name> (@PathVariable <Type> id) { <body> }

從上面的代碼片段可以看到,現在“ id”將從路徑中引用{ id }。 讓我們用一個真實的例子來嘗試:

?
1
2
3
4
5
6
7
8
9
@Controller
@SpringBootApplication
public class EmployeeManager {
   @RequestMapping(value=" /employee/{id}")
   public String pathVariableDemo(Model model, @PathVariable int id) {
      model.addAttribute("id", id);
      return "demo";
   }
}

現在,Spring查看輸出id參數,并將其與模板變量“ id”進行匹配。

請記住,如果我的代碼使用“ id”(參數)命名為其他名稱,那么它將無法工作。 然而,如果你不想對參數和模板變量使用相同的名字,你可以像這樣命名 PathVariable 注釋的名字:

?
1
2
3
4
5
6
7
8
9
@Controller
@SpringBootApplication
public class EmployeeManager {
   @RequestMapping(value=" /employee/{id}")
   public String pathVariableDemo(Model model, @PathVariable("id") int someRandomName) {
      model.addAttribute("id", someRandomName);
      return "demo";
   }
}

從上面的示例中可以看到,我將參數的名稱更改為 _someRandomName,_但還添加了@PathVariable (“ id”),它再次指定了我們要引用的模板變量。

最終您有兩個選擇:

  • 1.為方法參數使用相同的名稱
  • 2.在@PathVariable批注中指定模板變量的名稱

多個@PathVariable批注

如果你可以有多個@pathvariable 會怎么樣? 我們能做到嗎? 是的,我們可以! 事實上,這和添加一個@pathvariable 非常相似。

我們來演示一下:

?
1
2
3
4
5
6
7
8
9
@Controller
@SpringBootApplication
public class EmployeeManager {
   @RequestMapping(value="/{company}/employee/{id}", method=RequestMethod.GET)
   public String pathVariableDemo(@PathVariable("company") String companyName, @PathVariable("id") int employeeId) {
      // handle the code
      return "demo";
   }
}

從上面的代碼片段中可以看到,我們有兩個模板變量:

  • company
  • id

然后,我們提取每個模板變量,然后通過指定方法參數所引用的臨時變量將它們“分配”給方法參數。

@PathVariable vs @RequestParam結論

盡管@PathVariable和@RequestParam都用于從URL提取值,但是可以根據URL的設計使用它們。

通常,@PathVariable通常用于RESTful Web服務中,而@RequestParam用于從查詢參數中提取數據。

使用@PathVariable的坑

發現問題

前端路徑拼接用戶名,因為用戶名中是帶'.‘這個字符的。類似'Oliver.wang'。前端瀏覽器F12,發現路徑正常拼接'xxxxxx/Oliver.wang?xxx=xxx',后端代碼發現,controller層的參數,接收到只有'Oliver'。

解決過程

在方法中多加了一個參數(xxx,HttpServletRequest request){},輸出request.ServletPath(),發現路徑正常'/xxx/xxx/Oliver.wang'。

解決方案

  • 第一種:加上 {:.+} ,比如 @getMapping(“xxx/{name:.+}”)
  • 第二種:UrlEncode
  • 第三種:request.ServletPath() 拿到路徑截取字符串
  • 第四種:不拼接路徑,改成'xxxxx?name=Oliver.wang' 請求參數

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/zenglintao/article/details/106428463

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品一区二区三区中文字幕老牛 | 黑人一区二区三区四区五区 | 黄色香蕉视频 | 久久精品亚洲精品国产欧美kt∨ | 伊人久操视频 | 97久久曰曰久久久 | 青青草成人免费视频在线 | 亚洲第一黄色网 | 国产正在播放 | 色阁五月 | 日韩精品中文字幕一区二区三区 | 日韩毛片一区二区三区 | 911网站大全在线观看 | 国产一级一级片 | 午夜久久电影 | 国产亚洲精品精 | 成人毛片网站 | 成人在线观看一区二区 | 黄色片网站免费看 | 在线看毛片的网站 | 国产精品爱久久久久久久 | 中文字幕精品亚洲 | 亚洲尻逼视频 | 国产九九热视频 | 欧美三日本三级少妇三级99观看视频 | 成人三级黄色片 | 欧美一区2区三区4区公司二百 | 男女视频免费看 | 亚洲情av | 国av在线 | 国产91大片 | 性欧美性欧美 | 性高跟鞋xxxxhd4kvideos | 日本aaaa片毛片免费观看视频 | 激情综合在线 | 欧日韩| 国产免费一区二区三区最新不卡 | 久综合| 高清一区二区在线观看 | 一区二区久久电影 | 亚洲狠狠入 |