java中springMVC獲取請求參數(shù)的方法
原生方式獲取請求參數(shù)
html代碼
<a th:href="@{/testServlet(username='admin',password=123456)}">測試原生Servlet獲取請求參數(shù)</a><br>接收參數(shù)代碼
@RequestMapping(value = "/testServlet")
//形參位置的request表示當(dāng)前請求
public String testServlet(HttpServletRequest request) {
System.out.println(request.getParameter("username"));
System.out.println(request.getParameter("password"));
return "test";
}這種方式當(dāng)然可以接收到傳遞過來的參數(shù),但是方式略顯繁瑣。
控制器方法形參獲取請求參數(shù)
html代碼
<a th:href="@{/testParam(username='admin',password=123456)}">測試使用控制器的形參獲取請求參數(shù)</a><br>接收代碼,直接將傳遞過來的參數(shù)名寫成函數(shù)形參來獲取對應(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)然通過控制器方法形參獲取請求參數(shù)還有幾個我們需要注意的地方。
@RequestParam注解
使用這一個注解,可以在請求參數(shù)和形參之間建立映射關(guān)系,大致意思就是獲取到傳遞過來的這一參數(shù)然后賦值給形參。@RequestParam注解有三個屬性:
value屬性:設(shè)置指定的請求參數(shù)名。
required屬性:設(shè)置是否必須傳輸此參數(shù),默認(rèn)值為true,如果設(shè)置為true但是沒有接收到這一個參數(shù),那么將會報錯。
defaultValue屬性:設(shè)置參數(shù)的默認(rèn)值,不管required屬性值為true或false,當(dāng)value所指定的請求參數(shù)沒有傳輸或傳輸?shù)闹禐榭兆址畷r,則使用默認(rèn)值為形參賦值。
例如我們修改傳遞過來的參數(shù),下面只傳遞了參數(shù)名為username007的用戶名,并且沒有傳遞密碼。
<a th:href="@{/testParam(username007='admin')}">測試使用控制器的形參獲取請求參數(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,但是我們并沒有傳遞password007,所以使用的是默認(rèn)值。
@RequestHeader注解
使用這一個注解,可以將請求頭信息和控制器方法的形參創(chuàng)建映射關(guān)系,@RequestHeader注解也有三個屬性:value屬性,required屬性,defaultValue屬性,用法同@RequestParam。
首先查看請求標(biāo)頭的信息如下

html代碼
<a th:href="@{/testParam(username='admin',password='123456')}">測試使用控制器的形參獲取請求參數(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é)果我們可以看出,程序獲取到了請求頭的Host和Cookie信息,并且傳遞給了形參。相比于原生的ServletAPI獲取請求頭的信息,這種方式更加高效簡便。
@CookieValue注解
使用這一個注解,可以將cookie數(shù)據(jù)和控制器方法的形參創(chuàng)建映射關(guān)系, @CookieValue注解一共有三個屬性:value屬性、required屬性、defaultValue屬性,用法同@RequestParam。
通過查看請求頭的信息,我們可以看到Cookie數(shù)據(jù)如下

html代碼
<a th:href="@{/testParam(username='admin',password='123456')}">測試使用控制器的形參獲取請求參數(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屬性下的信息。
通過POJO獲取請求參數(shù)
想一想,要是我們提交的是一個表單,并且表單的提交內(nèi)容十分的多,那我們豈不是要寫很多個形參,而且也不方便維護(hù),所以當(dāng)參數(shù)很多時,我們可以用一個實(shí)體類來接收數(shù)據(jù)并進(jìn)行操作。當(dāng)瀏覽器傳輸?shù)恼埱髤?shù)的參數(shù)名和實(shí)體類中的屬性名一致時,請求參數(shù)就會為此屬性賦值。其底層原理是通過反射set方法進(jìn)行屬性注入。
如果通過POJO獲取請求參數(shù)出現(xiàn)了亂碼問題,可以先在web.xml文件當(dāng)中配置過濾器設(shè)置編碼。
web.xml文件配置過濾器代碼
<!--配置過濾器-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--設(shè)置獲取時的編碼-->
<init-param>
<!--在springMVC源碼當(dāng)中有一個encoding屬性表示編碼方式,可以通過初始化這一參數(shù)來設(shè)置編碼方式-->
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!--獲取響應(yīng)時的編碼-->
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!--設(shè)置過濾器作用的范圍-->
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>html代碼
<form th:action="@{/testBean}" method="get">
用戶名:<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>
電話:<input type="text" name="phoneNumber"><br>
郵箱:<input type="text" name="email"><br>
<input type="submit" value="使用實(shí)體類接收請求參數(shù)">
</form>實(shí)體類代碼,就相當(dāng)于根據(jù)表單設(shè)置了對應(yīng)的屬性,然后生成了屬性的set和get方法,創(chuàng)建了對應(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方法這里寫出,太占篇幅了。
@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";
}測試

輸出結(jié)果

這種方式可以很方便的接收數(shù)據(jù)并且進(jìn)行相對于的數(shù)據(jù)庫操作。
到此這篇關(guān)于java中springMVC獲取請求參數(shù)的方法的文章就介紹到這了,更多相關(guān)springMVC獲取請求參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
RabbitMQ實(shí)現(xiàn)消費(fèi)端限流的步驟
消費(fèi)者端限流的主要目的是控制消費(fèi)者每次從 RabbitMQ 中獲取的消息數(shù)量,從而實(shí)現(xiàn)消息處理的流量控制,這篇文章主要介紹了RabbitMQ如何實(shí)現(xiàn)消費(fèi)端限流,需要的朋友可以參考下2024-03-03
Eclipse中maven異常Updating Maven Project的統(tǒng)一解決方案
今天小編就為大家分享一篇關(guān)于Eclipse中maven異常Updating Maven Project的統(tǒng)一解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
Spring Boot 2.0快速構(gòu)建服務(wù)組件全步驟
這篇文章主要給大家介紹了關(guān)于Spring Boot 2.0快速構(gòu)建服務(wù)組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot 2.0具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
深入解析Java的Struts框架中的控制器DispatchAction
這篇文章主要介紹了深入解析Java的Struts框架中的控制器DispatchAction,Struts是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12

