1. 程式人生 > >SpringMVC——(3)請求引數

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;
}