SpringMVC系列(二): SpringMVC各個注解的使用


1、@RequestMapping

1.@RequestMapping除了能修飾方法,還能修飾類
(1)修飾類:提供初步的請求映射信息,相對於web請求的根目錄
(2)修飾方法:提供進一步的細分映射信息
相對於類定義處的URL,若類定義處未標注@RequestMapping,則方法處標記的URL相對於web應用的根目錄

2.@RequestMapping的請求方式
@RequestMapping 的 value、method、params 及 heads 分別表示請求 URL、請求方法、請求參數及請求頭的映射條
件,他們之間是與的關系,聯合使用多個條件可讓請求映射更加精確化。

3.Ant 風格資源地址支持 3 種匹配符:
– ?:匹配文件名中的一個字符
– *:匹配文件名中的任意字符
– **:** 匹配多層路徑
• @RequestMapping 還支持 Ant 風格的 URL:
– /user/*/createUser: 匹配
/user/aaa/createUser、/user/bbb/createUser 等 URL
– /user/**/createUser: 匹配
/user/createUser、/user/aaa/bbb/createUser 等 URL
– /user/createUser??: 匹配
/user/createUseraa、/user/createUserbb 等 URL

 1 package com.study.springmvc.handlers;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestMethod;
 6 
 7 @RequestMapping("/requestMappingTest")
 8 @Controller
 9 public class RequestMappingTest {
10 
11     public static final String SUCCESS="success";
12     /**
13      * 1.@RequestMapping除了能修飾方法,還能修飾類
14      *(1)修飾類:提供初步的請求映射信息,相對於web請求的根目錄
15      *(2)修飾方法:提供進一步的細分映射信息
16      * 相對於類定義處的URL,若類定義處未標注@RequestMapping,則方法處標記的URL相對於web應用的根目錄
17      * @return 成功
18      */
19     @RequestMapping("/testRequestMapping")
20     public String testRequestMapping() {
21         System.out.println("testRequestMapping");
22         return SUCCESS;
23     }
24     
25     /**
26      * 2.@RequestMapping的請求方式
27        @RequestMapping 的 value、method、params 及 heads 分別表示請求 URL、請求方法、請求參數及請求頭的映射條
28          件,他們之間是與的關系,聯合使用多個條件可讓請求映射更加精確化。
29      * @return
30      */
31     @RequestMapping(value="/testMethod",method=RequestMethod.POST)
32     public String testMethod() {
33         System.out.println("testMethod的post方式");
34         return SUCCESS;
35     } 
36     
37     /**
38      * 3.了解: 可以使用 params 和 headers 來更加精確的映射請求. params 和 headers 支持簡單的表達式.
39      * 
40      * @return
41      */
42     @RequestMapping(value = "testParamsAndHeaders", params = { "username",
43             "age!=10" }, headers = { "Accept-Language=zh-CN,zh;q=0.8" })
44     public String testParamsAndHeaders() {
45         System.out.println("testParamsAndHeaders");
46         return SUCCESS;
47     }
48     /**
49      * 4.Ant 風格資源地址支持 3 種匹配符:
50      *    – ?:匹配文件名中的一個字符
51      *    – *:匹配文件名中的任意字符
52      *    – **:** 匹配多層路徑
53      * @return
54      */
55     @RequestMapping("/testAntPath/*/abc")
56     public String testAntPath() {
57         System.out.println("testAntPath");
58         return SUCCESS;
59     }
60 }
 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3     
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <body>
 7 <!-- href="helloworld"和HelloWorld.java的@RequestMapping("/helloworld")對應 -->
 8 <a href="helloworld">Hello World</a>
 9 
10 <br/>
11 <a href="requestMappingTest/testRequestMapping">@RequestMapping修飾類和方法</a>
12 
13 <br/>
14 <form action="requestMappingTest/testMethod" method="POST">
15 <input type="submit" value="測試@RequestMappin的post請求方式">
16 </form>
17  
18  <br/>
19 <a href="requestMappingTest/testParamsAndHeaders?username=lgs&age=11">testParamsAndHeaders</a>
20  
21  <br/>
22 <a href="requestMappingTest/testAntPath/ggggggg/abc">testAntPath</a>
23     
24     
25 </body>
26 </html>

2、@PathVariable

@PathVariable 映射 URL 綁定的占位符

• 帶占位符的 URL 是 Spring3.0 新增的功能,該功能在SpringMVC 向 REST 目標挺進發展過程中具有里程碑的意義

• 通過 @PathVariable 可以將 URL 中占位符參數綁定到控制器處理方法的入參中:URL 中的 {xxx} 占位符可以通過@PathVariable("xxx") 綁定到操作方法的入參中。

1 <a href="pathVariableTest/testPathVariable/10">testPathVariable</a>
 1 package com.study.springmvc.handlers;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.PathVariable;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 
 7 @RequestMapping("/pathVariableTest")
 8 @Controller
 9 public class PathVariableTest {
10 
11     public static final String SUCCESS="success";
12     
13     /**
14      * @PathVariable 可以來映射 URL 中的占位符到目標方法的參數中.
15      * @param id
16      * @return
17      */
18     @RequestMapping("/testPathVariable/{id}")
19     public String testPathVariable(@PathVariable("id") Integer id) {
20         System.out.println("testPathVariable: " + id);
21         return SUCCESS;
22     }
23 }

 3、@RequestParam 

@RequestParam 來映射請求參數

value 值即請求參數的參數名
required 該參數是否必須. 默認為 true
defaultValue 請求參數的默認值

index.jsp代碼

1 <!--@RequestParam測試 begin  --> 
2 <br/>
3 <a href="requestParamTest/testRequestParam?username=lgs&age=11">testRequestParam</a>
4 <!--@RequestParam測試 end  --> 

handlers代碼

 1 package com.study.springmvc.handlers;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.RequestParam;
 6 
 7 @RequestMapping("/requestParamTest")
 8 @Controller
 9 public class RequestParamTest {
10 
11     public static final String SUCCESS="success";
12     
13 
14     /**
15      * @RequestParam 來映射請求參數. 
16      * value 值即請求參數的參數名 
17      * required 該參數是否必須. 默認為 true
18      * defaultValue 請求參數的默認值
19      */
20     @RequestMapping(value = "/testRequestParam")
21     public String testRequestParam(
22             @RequestParam(value = "username") String username,
23             @RequestParam(value = "age", required = false, defaultValue = "0") int age) {
24         System.out.println("testRequestParam, username: " + username + ", age: "
25                 + age);
26         return SUCCESS;
27     }
28 }

4. @RequestHeader

映射請求頭信息 用法同 @RequestParam,使用機會較少了解就行

index.jsp代碼

1 <!--@RequestHeader測試 begin  --> 
2 <br/>
3 <a href="requestHeaderTest/testRequestHeader">testRequestHeader</a>
4 <!--@RequestHeader測試 end  --> 

handlers代碼

 1 package com.study.springmvc.handlers;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestHeader;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 
 7 @RequestMapping("/requestHeaderTest")
 8 @Controller
 9 public class RequestHeaderTest {
10 
11     public static final String SUCCESS="success";
12     
13     /**
14      * 使用機會較少了解就行
15      * 映射請求頭信息 用法同 @RequestParam
16      */
17     @RequestMapping("/testRequestHeader")
18     public String testRequestHeader(
19             @RequestHeader(value = "Accept-Language") String al) {
20         System.out.println("testRequestHeader, Accept-Language: " + al);
21         return SUCCESS;
22     }
23 }

5. @CookieValue

映射一個 Cookie 值. 屬性同 @RequestParam,使用機會較少了解就行

index.jsp代碼

1 <!--@CookieValue測試 begin  --> 
2 <br/>
3 <a href="cookieValueTest/testCookieValue">testCookieValue</a>
4 <!--@CookieValue測試 end  --> 

handlers代碼

 1 package com.study.springmvc.handlers;
 2 
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.CookieValue;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 
 7 @RequestMapping("/cookieValueTest")
 8 @Controller
 9 public class CookieValueTest {
10 
11     public static final String SUCCESS="success";
12     
13     /**
14      * 使用機會較少了解就行
15      * 
16      * @CookieValue: 映射一個 Cookie 值. 屬性同 @RequestParam
17      */
18     @RequestMapping("/testCookieValue")
19     public String testCookieValue(@CookieValue(value = "JSESSIONID") String sessionId) {
20         System.out.println("testCookieValue: sessionId: " + sessionId);
21         return SUCCESS;
22     }
23 }

 6. @InitBinder

• 由 @InitBinder 標識的方法,可以對 WebDataBinder 對象進行初始化。WebDataBinder 是 DataBinder 的子類,用於完成由表單字段到 JavaBean 屬性的綁定
• @InitBinder方法不能有返回值,它必須聲明為void。
• @InitBinder方法的參數通常是是 WebDataBinder

1     @InitBinder
2     public void initBinder(WebDataBinder binder){
3         binder.setDisallowedFields("lastName");
4     }

7. @DateTimeFormat

對界面提交過來的日期進行格式化

@DateTimeFormat 注解可對java.util.Date、java.util.Calendar、java.long.Long 時間類型進行標注:
– pattern 屬性:類型為字符串。指定解析/格式化字段數據的模式,如:”yyyy-MM-dd hh:mm:ss”
– iso 屬性:類型為 DateTimeFormat.ISO。指定解析/格式化字段數據的ISO模式,包括四種:ISO.NONE(不使用) -- 默認、ISO.DATE(yyyy-MM-dd)、ISO.TIME(hh:mm:ss.SSSZ)、ISO.DATE_TIME(yyyy-MM-dd hh:mm:ss.SSSZ)
– style 屬性:字符串類型。通過樣式指定日期時間的格式,由兩位字符組成,第一位表示日期的格式,第二位表示時間的格式:S:短日期/時間格式、M:中日期/時間格式、L:長日期/時間格式、F:完整日期/時間格式、-:忽略日期或時間格式

1 @DateTimeFormat(pattern="yyyy-MM-dd")
2     private Date birth;

 

備注:必須在springmvc.xml里面配置<mvc:annotation-driven/>,因為配置了以后才會默認實例化數據集類型轉換和格式化的工廠類FormattingConversionServiceFactroyBean,如果自定義了類型轉換器則需要這樣配置

 1 <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>    
 2     
 3     <!-- 配置 ConversionService -->
 4     <bean id="conversionService"
 5         class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
 6         <property name="converters">
 7             <set>
 8                 <ref bean="employeeConverter"/>
 9             </set>
10         </property>    
11     </bean>

 

8. @NumberFormat

對界面提交過來的數值進行格式化

@NumberFormat 可對類似數字類型的屬性進行標注,它擁有兩個互斥的屬性:
– style:類型為 NumberFormat.Style。用於指定樣式類型,包括三種:Style.NUMBER(正常數字類型)、Style.CURRENCY(貨幣類型)、 Style.PERCENT(百分數類型)
– pattern:類型為 String,自定義樣式,如patter="#,###"

1 @NumberFormat(pattern="#,###,###.#")
2     private Float salary;

 備注:必須在springmvc.xml里面配置<mvc:annotation-driven/>,因為配置了以后才會默認實例化數據集類型轉換和格式化的工廠類FormattingConversionServiceFactroyBean,如果自定義了類型轉換器則需要和@NumberFormat 一樣配置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM