java中springMVC獲取請(qǐng)求參數(shù)的方法
原生方式獲取請(qǐng)求參數(shù)
html代碼
<a th:href="@{/testServlet(username='admin',password=123456)}">測(cè)試原生Servlet獲取請(qǐng)求參數(shù)</a><br>
接收參數(shù)代碼
@RequestMapping(value = "/testServlet") //形參位置的request表示當(dāng)前請(qǐng)求 public String testServlet(HttpServletRequest request) { System.out.println(request.getParameter("username")); System.out.println(request.getParameter("password")); return "test"; }
這種方式當(dāng)然可以接收到傳遞過(guò)來(lái)的參數(shù),但是方式略顯繁瑣。
控制器方法形參獲取請(qǐng)求參數(shù)
html代碼
<a th:href="@{/testParam(username='admin',password=123456)}">測(cè)試使用控制器的形參獲取請(qǐng)求參數(shù)</a><br>
接收代碼,直接將傳遞過(guò)來(lái)的參數(shù)名寫(xiě)成函數(shù)形參來(lái)獲取對(duì)應(yīng)的值。
@RequestMapping(value = "/testParam") public String testParam(String username, String password) { System.out.println("username = " + username + ", passwprd = " + password); return "test"; }
輸出內(nèi)容
當(dāng)然通過(guò)控制器方法形參獲取請(qǐng)求參數(shù)還有幾個(gè)我們需要注意的地方。
@RequestParam注解
使用這一個(gè)注解,可以在請(qǐng)求參數(shù)和形參之間建立映射關(guān)系,大致意思就是獲取到傳遞過(guò)來(lái)的這一參數(shù)然后賦值給形參。@RequestParam注解有三個(gè)屬性:
value屬性:設(shè)置指定的請(qǐng)求參數(shù)名。
required屬性:設(shè)置是否必須傳輸此參數(shù),默認(rèn)值為true,如果設(shè)置為true但是沒(méi)有接收到這一個(gè)參數(shù),那么將會(huì)報(bào)錯(cuò)。
defaultValue屬性:設(shè)置參數(shù)的默認(rèn)值,不管required屬性值為true或false,當(dāng)value所指定的請(qǐng)求參數(shù)沒(méi)有傳輸或傳輸?shù)闹禐榭兆址畷r(shí),則使用默認(rèn)值為形參賦值。
例如我們修改傳遞過(guò)來(lái)的參數(shù),下面只傳遞了參數(shù)名為username007的用戶(hù)名,并且沒(méi)有傳遞密碼。
<a th:href="@{/testParam(username007='admin')}">測(cè)試使用控制器的形參獲取請(qǐng)求參數(shù)</a><br>
接收參數(shù)代碼
@RequestMapping(value = "/testParam") public String testParam(@RequestParam(value = "username007", required = false, defaultValue = "默認(rèn)username") String username, @RequestParam(value = "password007", required = false, defaultValue = "默認(rèn)password") String password) { System.out.println("username = " + username + ", passwprd = " + password); return "test"; }
輸出結(jié)果
從輸出結(jié)果可以看出,由于我們傳遞了username007,@RequestParam注解講其內(nèi)容傳遞給了形參username,但是我們并沒(méi)有傳遞password007,所以使用的是默認(rèn)值。
@RequestHeader注解
使用這一個(gè)注解,可以將請(qǐng)求頭信息和控制器方法的形參創(chuàng)建映射關(guān)系,@RequestHeader注解也有三個(gè)屬性:value屬性,required屬性,defaultValue屬性,用法同@RequestParam。
首先查看請(qǐng)求標(biāo)頭的信息如下
html代碼
<a th:href="@{/testParam(username='admin',password='123456')}">測(cè)試使用控制器的形參獲取請(qǐng)求參數(shù)</a><br>
接收參數(shù)代碼
@RequestMapping(value = "/testParam") public String testParam( @RequestHeader(value = "Host", required = false, defaultValue = "默認(rèn)Host") String host, @RequestHeader(value = "Cookie", required = false, defaultValue = "默認(rèn)Cookie") String cookie, String username, String password) { System.out.println("username = " + username + ", passwprd = " + password); System.out.println("Host = " + host + ", Cookie = " + cookie); return "test"; }
輸出結(jié)果
從輸出結(jié)果我們可以看出,程序獲取到了請(qǐng)求頭的Host和Cookie信息,并且傳遞給了形參。相比于原生的ServletAPI獲取請(qǐng)求頭的信息,這種方式更加高效簡(jiǎn)便。
@CookieValue注解
使用這一個(gè)注解,可以將cookie數(shù)據(jù)和控制器方法的形參創(chuàng)建映射關(guān)系, @CookieValue注解一共有三個(gè)屬性:value屬性、required屬性、defaultValue屬性,用法同@RequestParam。
通過(guò)查看請(qǐng)求頭的信息,我們可以看到Cookie數(shù)據(jù)如下
html代碼
<a th:href="@{/testParam(username='admin',password='123456')}">測(cè)試使用控制器的形參獲取請(qǐng)求參數(shù)</a><br>
接收參數(shù)代碼
@RequestMapping(value = "/testParam") public String testParam( @CookieValue("JSESSIONID") String JSESSIONID, String username, String password) { System.out.println("username = " + username + ", passwprd = " + password); System.out.println("JSESSIONID = " + JSESSIONID); return "test"; }
輸出結(jié)果
相當(dāng)于獲取到了Cookie中的JSESSIONID屬性下的信息。
通過(guò)POJO獲取請(qǐng)求參數(shù)
想一想,要是我們提交的是一個(gè)表單,并且表單的提交內(nèi)容十分的多,那我們豈不是要寫(xiě)很多個(gè)形參,而且也不方便維護(hù),所以當(dāng)參數(shù)很多時(shí),我們可以用一個(gè)實(shí)體類(lèi)來(lái)接收數(shù)據(jù)并進(jìn)行操作。當(dāng)瀏覽器傳輸?shù)恼?qǐng)求參數(shù)的參數(shù)名和實(shí)體類(lèi)中的屬性名一致時(shí),請(qǐng)求參數(shù)就會(huì)為此屬性賦值。其底層原理是通過(guò)反射set方法進(jìn)行屬性注入。
如果通過(guò)POJO獲取請(qǐng)求參數(shù)出現(xiàn)了亂碼問(wèn)題,可以先在web.xml文件當(dāng)中配置過(guò)濾器設(shè)置編碼。
web.xml文件配置過(guò)濾器代碼
<!--配置過(guò)濾器--> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!--設(shè)置獲取時(shí)的編碼--> <init-param> <!--在springMVC源碼當(dāng)中有一個(gè)encoding屬性表示編碼方式,可以通過(guò)初始化這一參數(shù)來(lái)設(shè)置編碼方式--> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <!--獲取響應(yīng)時(shí)的編碼--> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <!--設(shè)置過(guò)濾器作用的范圍--> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
html代碼
<form th:action="@{/testBean}" method="get"> 用戶(hù)名:<input type="text" name="username"><br> 密碼:<input type="password" name="password"><br> 性別:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女">女<br> 年齡:<input type="text" name="age"><br> 地址:<input type="text" name="location"><br> 電話(huà):<input type="text" name="phoneNumber"><br> 郵箱:<input type="text" name="email"><br> <input type="submit" value="使用實(shí)體類(lèi)接收請(qǐng)求參數(shù)"> </form>
實(shí)體類(lèi)代碼,就相當(dāng)于根據(jù)表單設(shè)置了對(duì)應(yīng)的屬性,然后生成了屬性的set和get方法,創(chuàng)建了對(duì)應(yīng)的構(gòu)造方法和空構(gòu)造方法。
package com.mvc.bean; public class User { private Integer id; private String username; private String password; private Integer age; private String location; private String phoneNumber; private String sex; private String email; public User() { } public User(Integer id, String username, String password, Integer age, String location, String phoneNumber, String sex, String email) { this.id = id; this.username = username; this.password = password; this.age = age; this.location = location; this.phoneNumber = phoneNumber; this.sex = sex; this.email = email; } //屬性的get和set方法這里寫(xiě)出,太占篇幅了。 @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", age=" + age + ", location='" + location + '\'' + ", phoneNumber='" + phoneNumber + '\'' + ", sex='" + sex + '\'' + ", email='" + email + '\'' + '}'; } }
接收代碼
@RequestMapping(value = "/testBean") public String testBean(User user) { System.out.println(user); return "test"; }
測(cè)試
輸出結(jié)果
這種方式可以很方便的接收數(shù)據(jù)并且進(jìn)行相對(duì)于的數(shù)據(jù)庫(kù)操作。
到此這篇關(guān)于java中springMVC獲取請(qǐng)求參數(shù)的方法的文章就介紹到這了,更多相關(guān)springMVC獲取請(qǐng)求參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot中如何實(shí)現(xiàn)kafa指定offset消費(fèi)
這篇文章主要介紹了springboot中如何實(shí)現(xiàn)kafa指定offset消費(fèi),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12java打印從1到100的值(break,return斷句)
java 先寫(xiě)一個(gè)程序,打印從1到100的值。之后修改程序,通過(guò)使用break關(guān)鍵詞,使得程序在打印到98時(shí)退出。然后嘗試使用return來(lái)達(dá)到相同的目的2017-02-02MyBatis連接池的深入和動(dòng)態(tài)SQL詳解
這篇文章主要介紹了MyBatis連接池的深入和動(dòng)態(tài)SQL詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Java中l(wèi)ambda表達(dá)式的基本運(yùn)用
大家好,本篇文章主要講的是Java中l(wèi)ambda表達(dá)式的基本運(yùn)用,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下2022-01-01Java?windows環(huán)境構(gòu)建圖文教程
這篇文章主要為大家介紹了Java?windows環(huán)境構(gòu)建圖文教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-12-12springboot+vue?若依項(xiàng)目在windows2008R2企業(yè)版部署流程分析
這篇文章主要介紹了springboot+vue?若依項(xiàng)目在windows2008R2企業(yè)版部署流程,本次使用jar包啟動(dòng)后端,故而準(zhǔn)備打包后的jar文件,需要的朋友可以參考下2022-12-12使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了如何使用java實(shí)現(xiàn)備份和恢復(fù)SQLServer表數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01