最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring MVC請求參數(shù)的獲取教程指南

 更新時(shí)間:2024年10月24日 08:51:06   作者:2的n次方_  
本文介紹了SpringMVC中如何獲取各種類型的請求參數(shù),包括基本類型、POJO、數(shù)組、集合以及RESTful風(fēng)格的參數(shù),還討論了請求參數(shù)中文亂碼的解決方案,參數(shù)綁定的注解如@RequestParam,以及自定義類型轉(zhuǎn)換器的實(shí)現(xiàn),需要的朋友可以參考下

1. 獲取 URL 中的參數(shù)

獲取 URL 中的參數(shù)是通過 @PathVariable 注解實(shí)現(xiàn)的

@RequestMapping("/article/{articleId}")
public String method12(@PathVariable("articleId") String articleId){
    return "接收到參數(shù)articleId: " + articleId;
}

@RequestMapping("/article/{articleId}")大括號(hào)中的內(nèi)容就相當(dāng)于占位符,可以傳入任何參數(shù),但是不能不傳

多個(gè)參數(shù)也是可以接受的:

@RequestMapping("/article/{articleId}/{name}")
public String method12(@PathVariable String articleId,@PathVariable String name){
    return "接收到參數(shù)articleId: " + articleId + ", name :" + name;
}

前面也提到過,路徑中的參數(shù)相當(dāng)于占位符,不能少傳,順序也必須一致

把 required 改為 false 也不行

2. 上傳文件

通過 MultipartFile可以獲取文件的對象

@RequestMapping("/m12")
public String method13(MultipartFile file){
System.out.println(file.getOriginalFilename());
return "接收到參數(shù)file: " + file.getOriginalFilename();
}

3. cookie 和 session 的介紹

cookie 就相當(dāng)于這個(gè)令牌,當(dāng)用戶首次訪問一個(gè)網(wǎng)站時(shí),服務(wù)器可以在響應(yīng)中設(shè)置 Cookie,并將其發(fā)送給客戶端瀏覽器。瀏覽器會(huì)將 Cookie 存儲(chǔ)起來。在后續(xù)的請求中,瀏覽器會(huì)自動(dòng)在請求頭中攜帶該網(wǎng)站的 Cookie 信息發(fā)送給服務(wù)器。服務(wù)器通過讀取 Cookie 中的數(shù)據(jù)來識(shí)別用戶和獲取相關(guān)狀態(tài)信息。

Session 是在服務(wù)器端用于跟蹤用戶會(huì)話狀態(tài)的一種機(jī)制,當(dāng)用戶首次與服務(wù)器建立連接時(shí),服務(wù)器會(huì)創(chuàng)建一個(gè)唯一的 Session ID,并將這個(gè) ID 返回給客戶端??蛻舳送ǔ?huì)將 Session ID 存儲(chǔ)在 Cookie 中(也可以通過 URL 重寫等方式傳遞)。在后續(xù)的請求中,客戶端會(huì)攜帶 Session ID,服務(wù)器通過這個(gè) ID 來識(shí)別特定的用戶會(huì)話,并從服務(wù)器端的存儲(chǔ)中獲取相應(yīng)的 Session 數(shù)據(jù)。

上面的學(xué)生信息中,每一個(gè) session ID 都對應(yīng)一個(gè) session 對象

例如,用戶在進(jìn)行網(wǎng)上購物時(shí),將商品添加到購物車。服務(wù)器會(huì)在 Session 中記錄購物車的內(nèi)容。當(dāng)用戶在不同頁面瀏覽或進(jìn)行結(jié)算時(shí),服務(wù)器通過 Session ID 找到對應(yīng)的購物車數(shù)據(jù),確保用戶的購物操作在整個(gè)會(huì)話過程中保持一致。

也就是說,第一次沒有 session 時(shí)會(huì)先創(chuàng)建,然后把 session ID 通過 Set-cookie 來給客戶端

session 是保存在內(nèi)存中的,如果重啟服務(wù)器 session 數(shù)據(jù)就會(huì)消失丟失

cookie 和 session 的區(qū)別:

  1. cookie 是客戶端保存用戶信息的一種機(jī)制,session 是服務(wù)器端保存用戶信息的一種機(jī)制
  2. cookie 和 session 之間主要是通過 session ID 關(guān)聯(lián)起來的,session ID 是 cookie 和 session 之間的橋梁
  3. cookie 和session 經(jīng)常會(huì)配合使用,但是不是必須配合,可以用 cookie 來保存一些數(shù)據(jù)在客戶端,不一定是用戶身份信息或 session ID,session 中的 session ID 也不一定必須用 cookie 來保存,還可以通過其他來傳遞,例如通過 URL 來傳遞

3.1 獲取 cookie

先來使用創(chuàng)建 HttpServletRequest 對象來調(diào)用 getCookies() 的方法來獲取 cookie,因?yàn)?cookie 還可能為 null,所以也需要進(jìn)行判斷

//獲取cookie
@RequestMapping("getCookie")
public String getCookie(HttpServletRequest request){
Cookie[] cookies = request.getCookies();
if(cookies != null){
    for (Cookie cookie : cookies) {
        System.out.println(cookie.getName() + ":" + cookie.getValue());
    }
}else{
    System.out.println("cookie為空");
}
return "獲取cookie成功";
}

在 postman 中添加兩個(gè) cookie 值,然后獲取 cookie

調(diào)用 getCookies() 方法來獲取 cookie 的方式是獲取所有的 cookie,如果需要獲取指定的 cookie 的話還需要遍歷,加入判斷

通過 @CookieValue 注解使用可以直接獲取指定名稱的 cookie

@RequestMapping("getCookie2")
public String getCookie2(@CookieValue("name") String name){
    return "從cookie中獲取信息,name:" + name;
}

參數(shù)名稱和 cookie 名是對應(yīng)的

3.2 獲取 session

由于 getSession 方法是先從 cookie 中找到 session ID,然后根據(jù) session ID 獲取 session,所以可能出現(xiàn) session 為 null 的情況,設(shè)置為 true 就會(huì)創(chuàng)建一個(gè)空的 session,設(shè)置為 false 就不會(huì)創(chuàng)建,默認(rèn)是 true

在獲取 session 對象之前先設(shè)置好 session

@RequestMapping("/setSession")
public String setSession(HttpServletRequest request){
//獲取session對象
HttpSession session = request.getSession();
session.setAttribute("userName","zhangsan");
session.setAttribute("age",18);
return "設(shè)置session成功";
}
@RequestMapping("/getSession")
public String getSession(HttpServletRequest request){
//先從cookie中找到session ID,然后根據(jù)session ID獲取session
HttpSession session = request.getSession(false);
if(session == null){
    return "獲取session為null";
}
String userName = (String) session.getAttribute("userName");
return "從session中獲取userName: " + userName;
}

瀏覽器中先訪問 getSession 時(shí),由于還沒有設(shè)置 session,所以此時(shí)還獲取不到 session 信息,不過由于用的是 getSession() 方法,如果 session 為空時(shí)會(huì)創(chuàng)建一個(gè) session,

設(shè)置之后就可以正常獲取了

如果換個(gè)瀏覽器重新獲取就又獲取不到了

這就是因?yàn)樘幱诓煌臅?huì)話中,會(huì)話的 id 是不同的,這也就是相當(dāng)于不同用戶訪問時(shí)處于不同的 session 中會(huì)獲取不同的 session ID

也可以直接傳入 HttpSession 對象來獲取:

@RequestMapping("/getSession2")
public String getSession2(HttpSession session){
String userName = (String) session.getAttribute("userName");
if(userName !=null){
    return "從session中獲取userName: " + userName;
}else {
    return "獲取session為null";
}
}

還有一種方式獲取就是通過 @SessionAttribute 注解來獲取

@RequestMapping("/getSession3")
public String getSession3(@SessionAttribute String userName){
    return "從session中獲取userName: " + userName;
}

通過這種方式來獲取指定 session ,這個(gè) session 是必須要設(shè)置好的,如果不存在的話就會(huì)直接報(bào)錯(cuò),要求強(qiáng)制綁定,例如上面的 userName 如果找不到就會(huì)報(bào)錯(cuò)

3. 獲取 header

http 的請求頭是有很多個(gè)鍵值對的,可以通過創(chuàng)建 HttpServletRequest 對象來調(diào)用 getHeader 方法來獲取指定的請求頭

@RequestMapping("/getHeader")
public String getHeader(HttpServletRequest request){
String User_Agent = request.getHeader("User-Agent");
return "User_Agent: " + User_Agent;
}

還可以通過 @RequestHeader注解來獲取

@RequestMapping("/getHeader2")
public String getHeader2(@RequestHeader("User-Agent") String User_Agent){
    return "User_Agent: " + User_Agent;
}

通過 Fiddler 抓包可以看到上傳的二進(jìn)制文件

這里的重命名和上面的是不一樣的,這里使用的是 @RequestPart注解

以上就是Spring MVC請求參數(shù)的獲取教程指南的詳細(xì)內(nèi)容,更多關(guān)于Spring MVC請求參數(shù)獲取的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Android系統(tǒng)中的root權(quán)限獲得原理

    詳解Android系統(tǒng)中的root權(quán)限獲得原理

    這篇文章主要介紹了詳解Android系統(tǒng)中的Root權(quán)限獲得原理,安卓基于Linux,所以原理也相當(dāng)于Linux中的root用戶,需要的朋友可以參考下
    2015-08-08
  • 解決springboot中配置過濾器以及可能出現(xiàn)的問題

    解決springboot中配置過濾器以及可能出現(xiàn)的問題

    這篇文章主要介紹了解決springboot中配置過濾器以及可能出現(xiàn)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java實(shí)戰(zhàn)項(xiàng)目 健身管理系統(tǒng)

    Java實(shí)戰(zhàn)項(xiàng)目 健身管理系統(tǒng)

    本文是一個(gè)Java語言編寫的實(shí)戰(zhàn)項(xiàng)目,是一個(gè)健身管理系統(tǒng),主要用到了ssm+springboot等技術(shù),技術(shù)含量筆記高,感興趣的童鞋跟著小編往下看吧
    2021-09-09
  • SpringBoot中的@Component注解源碼

    SpringBoot中的@Component注解源碼

    在SpringBoot中,@Component注解用于標(biāo)識(shí)一個(gè)類為Bean,并由Spring進(jìn)行管理,它需要配合@ComponentScan注解使用,后者負(fù)責(zé)掃描包含@Component的類,并進(jìn)行自動(dòng)裝配,本文給大家介紹SpringBoot中的@Component注解源碼,感興趣的朋友一起看看吧
    2024-01-01
  • java對象持久化保存的方法詳解

    java對象持久化保存的方法詳解

    這篇文章主要介紹了java對象持久化保存的方法詳解,在java應(yīng)用開發(fā)的過程中,經(jīng)常遇到需要持久保存java對象的情況,比如:用戶信息、博客評(píng)論內(nèi)容等等,本文針對java對象的持久化保存方法進(jìn)行討論,簡述各個(gè)方法的優(yōu)劣,需要的朋友可以參考下
    2023-07-07
  • Spring Security基本架構(gòu)與初始化操作流程詳解

    Spring Security基本架構(gòu)與初始化操作流程詳解

    這篇文章主要介紹了Spring Security基本架構(gòu)與初始化操作流程,Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架
    2023-03-03
  • Springboot轉(zhuǎn)發(fā)重定向?qū)崿F(xiàn)方式解析

    Springboot轉(zhuǎn)發(fā)重定向?qū)崿F(xiàn)方式解析

    這篇文章主要介紹了springboot轉(zhuǎn)發(fā)重定向?qū)崿F(xiàn)方式解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java方法上注解值修改不成功的問題

    Java方法上注解值修改不成功的問題

    這篇文章主要介紹了Java方法上注解值修改不成功的解決方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Mybatis插入Oracle數(shù)據(jù)庫日期型數(shù)據(jù)過程解析

    Mybatis插入Oracle數(shù)據(jù)庫日期型數(shù)據(jù)過程解析

    這篇文章主要介紹了Mybatis插入Oracle數(shù)據(jù)庫日期型數(shù)據(jù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java中Spring MVC接收表單數(shù)據(jù)的常用方法

    Java中Spring MVC接收表單數(shù)據(jù)的常用方法

    Spring MVC是Spring框架中的一個(gè)模塊,用于開發(fā)基于MVC(Model-View-Controller)架構(gòu)的Web應(yīng)用程序,它提供了一種輕量級(jí)的、靈活的方式來構(gòu)建Web應(yīng)用,同時(shí)提供了豐富的功能和特性,本文給大家介紹了Spring MVC接收表單數(shù)據(jù)的方法,需要的朋友可以參考下
    2024-05-05

最新評(píng)論

镇雄县| 贵溪市| 阿勒泰市| 华蓥市| 永川市| 巴楚县| 谷城县| 阿拉善盟| 青冈县| 金乡县| 信阳市| 若羌县| 彭山县| 清水县| 北川| 育儿| 嵩明县| 工布江达县| 鄂托克旗| 五大连池市| 鄱阳县| 界首市| 吴忠市| 惠州市| 大田县| 建湖县| 中宁县| 突泉县| 孟津县| 云林县| 杭锦后旗| 天等县| 石柱| 凌海市| 志丹县| 石泉县| 新化县| 旬阳县| 登封市| 伊通| 靖州|