1. 程式人生 > >SpringMVC-3 對映請求引數和請求頭

SpringMVC-3 對映請求引數和請求頭

  Spring MVC通過分析控制器處理方法的簽名,將 HTTP請求資訊繫結到處理方法的相應人蔘中。除@PathVariable註解外,SpringMVC還可使用@RequestParam、@RequestHeader和@CookieValue註解分別對映請求引數、請求頭和Cookie值資訊到相應處理方法的入參中,並根據方法的返回值型別做出相應的後續處理。
  另外,SpringMVC也支援使用POJO物件繫結請求引數,且也可以使用Servlet原生API作為目標方法的形參
  對映請求引數和請求頭資訊的具體實現程式碼下載地址:http://download.csdn.net/download/bingbeichen/9792045

1. 使用@RequestParam註解對映請求引數資訊

// 注:請求可以為springmvc/testRequestParam?username=qiaobc&age=23
/**
 * 使用@RequestParam註解對映請求引數
 *  1). value : 請求引數的引數名
 *  2). required : 該請求引數是否為必須的,預設為true
 *  3). defaultValue : 請求引數的預設值
 */
@RequestMapping("testRequestParam")
public String testRequestParam(@RequestParam
("username") String userName, @RequestParam(value="age", required=false, defaultValue="0") int age) { System.out.println("testRequestParam: username = " + userName + ", age = " + age); return SUCCESS; }

2. 使用@RequestHeader註解對映請求頭資訊

// 注:請求可以為springmvc/testRequestHeader
/**
 * 使用@RequestHeader註解對映請求頭資訊,用法同@RequestParam註解,瞭解即可
 */
@RequestMapping("testRequestHeader") public String testRequestHeader(@RequestHeader(value="Accept-Language") String al) { System.out.println("testRequestHeader : Accept-Language = " + al); return SUCCESS; }

3. 使用@CookieValue註解對映Cookie值資訊

// 注:請求可以為springmvc/testCookieValue
/**
 * 使用@CookieValue註解對映一個Cookie值,用法同@RequestParam註解,瞭解即可
 */
@RequestMapping("testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
    System.out.println("testCookieValue : JSESSIONID = " + sessionId);
    return SUCCESS;
}

4. 使用POJO物件繫結請求引數資訊

<!-- 請求URL:springmvc/testPojo -->
<form action="springmvc/testPojo" method="post">
    username: <input type="text" name="username" />
    <br><br>
    password: <input type="password" name="password" />
    <br><br>
    email: <input type="text" name="email" />
    <br><br>
    age: <input type="text" name="age" />
    <br><br>
    province: <input type="text" name="address.province" />
    <br><br>
    city: <input type="text" name="address.city" />
    <br><br>
    <input type="submit" value="submit" />
</form>
/**
 * Spring MVC會按請求引數名和POJO屬性名進行自動匹配,自動為該物件填充屬性值,且支援級聯屬性
 * User類中包含username、password、email、age和address屬性,而Address類中包含province和city屬性
 */
@RequestMapping("testPojo")
public String testPojo(User user) {
    System.out.println(user);
    return SUCCESS;
}

5. 使用Servlet原生API作為目標方法的引數

/**
 * 可以使用Servlet原生的API作為目標方法的引數,具體支援以下型別:
 *      HttpServletRequest、HttpServletResponse、HttpSession
 *      java.security.Principal、Locale
 *      InputStream、OutputStream、Reader、Writer
 * 具體可在ServletHandlerMethodInvoker的resolveStandardArgument()方法中檢視
 */
@RequestMapping("testServletAPI")
public String testServletAPI(HttpServletRequest request, HttpServletResponse response) {
    System.out.println("testServletAPI: " + request + ", " + response);
    return SUCCESS;
}