SpringMVC——(3)請求引數
一、@PathVariable
通過 @PathVariable 可以將 URL 中佔位符引數繫結到控制器處理方法的入參中。URL中的{xxx} 佔位符可以通過@PathVariable("xxx") 繫結到操作方法的入參中。
二、@RequestParam
在處理方法入參處使用@RequestParam 可以把請求參 數傳遞給請求方法。屬性:value:引數名 ;required:是否必須。預設為 true, 表示請求引數中必須包含對應 的引數,若不存在,將丟擲異常。
/** * 測試@RequestParam 來對映請求引數.<br> * value 值即請求引數的引數名,方法引數名可以和value值不同 <br> * required 該引數是否必須. 預設為 true <br> * defaultValue 請求引數的預設值,如果沒有設定預設值,引數型別最好為包裝類 */ @RequestMapping(value = "/testRequestParam") public String testRequestParam(@RequestParam(value = "username") String un, @RequestParam(value = "age", required = false, defaultValue = "0") int age) { System.out.println("testRequestParam, username: " + un + ", age: " + age); return SUCCESS; }
<a href="SpringMVC/testRequestParam?username=atguigu&age=11">Test RequestParam</a>
三、@RequestHeader
使用 @RequestHeader 繫結請求報頭的屬性值,請求頭包含了若干個屬性,伺服器可據此獲知客戶端的信 息,通過 @RequestHeader 即可將請求頭中的屬性值綁 定到處理方法的入參中。
/** * 對映請求頭資訊 用法同 @RequestParam */ @RequestMapping("/testRequestHeader") public String testRequestHeader(@RequestHeader(value = "Accept-Language") String al) { System.out.println("testRequestHeader, Accept-Language: " + al); return SUCCESS; }
<a href="SpringMVC/testRequestHeader">Test RequestHeader</a>
四、@CookieValue
@CookieValue 可讓處理方法入參繫結某個 Cookie 值.
/** * @CookieValue: 對映一個 Cookie 值. 屬性同 @RequestParam */ @RequestMapping("/testCookieValue") public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) { System.out.println("testCookieValue: sessionId: " + sessionId); return SUCCESS; }
<a href="SpringMVC/testCookieValue">Test CookieValue</a>
五、使用POJO物件繫結請求引數
Spring MVC 會按請求引數名和 POJO 屬性名進行自動匹配,自動為該物件填充屬性值。支援級聯屬性。如:dept.deptId、dept.address.tel 等
1、POJO物件(getter/setter省略):
public class User extends BaseEntity {
private static final long serialVersionUID = -5491793647029658682L;
private String username;
private String password;
private String email;
private Integer age;
private BigDecimal money;
private Date birthDay;
private Address address;
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", email=" + email + ", age=" + age
+ ", money=" + money + ", birthDay=" + birthDay + ", address=" + address + "]";
}
}
public class Address extends BaseEntity {
private static final long serialVersionUID = 7678367262215108082L;
private String province;
private String city;
@Override
public String toString() {
return "Address [province=" + province + ", city=" + city + "]";
}
}
2、Controller
/**
* Spring MVC 會按請求引數名和 POJO 屬性名進行自動匹配, 自動為該物件填充屬性值。支援級聯屬性。
* 如:dept.deptId、dept.address.tel 等
*/
@RequestMapping("/testPojo")
public String testPojo(User user) {
System.out.println("testPojo: " + user);
System.out.println(user.getId() + "," + user.getAddress().getId());
return SUCCESS;
}
3、頁面
<form action="SpringMVC/testPojo" method="post">
<input type="hidden" name="id" value="1">
username: <input type="text" name="username"/>
<br>
password: <input type="password" name="password"/>
<br>
email: <input type="text" name="email"/>
<br>
age: <input type="text" name="age"/>
<br>
money:<input type="text" name="money"/>
<br>
birthDay:<input type="date" name="birthDay"/>(yyyy-MM-dd)
<br>
city: <input type="text" name="address.city"/>
<br>
province: <input type="text" name="address.province"/>
<br>
<input type="hidden" name="address.id" value="2">
<br>
<input type="submit" value="Submit"/>
</form>
4、測試
testPojo: User [username=12, password=2112, email=12asdad, age=23, money=33.322222221, birthDay=Tue Oct 30 00:00:00 CST 2018, address=Address [province=cc, city=dd]]
user.getId() :1, user.getAddress().getId():2
*Date資料型別繫結後期詳細介紹
六、使用 Servlet API
在SpringMVC中可以使用 Serlvet原生的 API。
使用API作為引數,具體支援如下型別:HttpServletRequest、HttpServletResponse、 HttpSession、 java.security.Principal、 Locale、 InputStream、 OutputStream、 Reader 、Writer。
@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request, HttpServletResponse response) {
// 1、使用API作為引數
// 2、獲取請求物件
HttpServletRequest request2 = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest();
// 3、使用SpringMVC的web工具類實現session的讀寫,需要先獲取請求物件
HttpServletRequest request3 = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest();
WebUtils.setSessionAttribute(request3, "test2", "sessionValue2");
WebUtils.getSessionAttribute(request, "test2");
return SUCCESS;
}