1. 程式人生 > >springMVC請求註解@RequestMapping各個屬性值

springMVC請求註解@RequestMapping各個屬性值

1、RequestMapping介面的原始碼如下,裡面定義了七個屬性
(1)@Target中有兩個屬性,分別為 ElementType.METHODElementType.TYPE ,也就是說 @RequestMapping 可以在方法和類的宣告中使用
(2)可以看到註解中的屬性除了 name() 返回的字串,其它的方法均返回陣列,也就是可以定義多個屬性值,例如 value()可以同時定義多個字串值來接收多個URL請求;
(3)value, method;
value: 指定請求的實際地址,指定的地址可以是URI Template 模式(後面將會說明);
method: 指定請求的method型別, GET、POST、PUT、DELETE等;
(4)consumes,produces;
consumes: 指定處理請求的提交內容型別(Content-Type),例如application/json, text/html;
produces: 指定返回的內容型別,僅當request請求頭中的(Accept)型別中包含該指定型別才返回;
(5) params,headers;
params: 指定request中必須包含某些引數值是,才讓該方法處理。
headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求。

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {

    String[] value() default {};

    RequestMethod[] method() default {};

    String[] params() default {};

    String[] headers() default {};

    String[]
consumes() default {}; String[] produces() default {}; }

註解@RequestMapping中屬性method的解釋和用法:

@Controller
@RequestMapping("/Register")
public class Register{

    /**
     * method限制請求方式
     */
    @RequestMapping(value="/test", method={RequestMethod.GET, RequestMethod.POST})
    public void
test() { } }

註解@RequestMapping中屬性params的解釋和用法:

對映請求的引數過濾主對映請求。
任何環境都採用相同的格式:
(1)“myParam = myValue”風格表示式的序列,只有當每個這樣的引數具有給定的值時才對映請求。
(2)使用“!=”運算子可以取消表示式,如“myParam!= myValue”中所示。
(3)還支援“myParam”樣式表示式,這些引數必須存在於請求中(允許有任何值)。
(4)最後,“!myParam”風格的表示式表明指定的引數不是應該出現在請求中的。
(5)在型別級別和方法級別都支援!在型別級別使用時,所有方法級別對映都會繼承此引數限制(即在處理程式方法甚至解決之前,將檢查型別級別限制)。
(6)在Servlet環境中,引數對映被認為是在型別級別強制執行的限制。主路徑對映(即指定的URI值)仍然必須唯一標識目標處理程式,引數對映只是簡單地表示呼叫處理程式的先決條件。
(7)在Portlet環境中,將引數作為對映區分因素進行考慮,即主要portlet模式對映加上引數條件唯一標識目標處理程式。只要引數對映不同,不同的處理程式可能會對映到同一個portlet模式。

params例項如下:

@Controller
@RequestMapping("/Register")
public class Register{

    /**
     * params的四種用法:
     * age=20 有引數age並且等於20
     * name!=xiaoming 有引數name但是不等於xiaoming
     * address 有引數address,可以是任何值
     * !sex 沒有引數sex
     */
    @RequestMapping(value="/test", params={"age=20", "name!=xiaoming", "address", "!sex"})
    public void test() {
    }
}

註解@RequestMapping中屬性headers的解釋和用法:

對映請求的標題縮小了主對映。
任何環境都採用相同的格式:
(1)“My-Header = myValue”風格表示式的序列,只有在發現每個這樣的頭部具有給定的值時才對映請求。
(2)使用“!=”運算子可以取消表示式,如“My-Header= myValue”中所述。
(3)“My-Header”樣式表示式也被支援,這些頭部必須存在於請求中(允許有任何值)。
(4)最後,“!My-Header”風格的表示式表明指定的頭部不應該出現在請求中。
(5)還支援媒體型別萬用字元(*),用於Accept和Content-Type等標題。例如,
@RequestMapping(value = "/something", headers = "content-type=text/*")
將匹配具有“text/html”,“text/plain”等內容型別的請求。
(6)在型別級別和方法級別都支援!
在型別級別使用時,所有方法級別對映都會繼承此頭限制(即在處理程式方法得到解決之前,將檢查型別級別限制)。
(7)在Servlet環境中對映HttpServletRequest頭,以及針對Portlet 2.0環境中的PortletRequest屬性。

headers例項:

@Controller
@RequestMapping("/Register")
public class Register{

    /**
     * headers的四種用法:意思和params的四種意義一樣
     */
    @RequestMapping(value="/test", headers={"Content-Length=14", "Referer!=http://127.0.0.1:8020/test/html/index.html", "User-Agent", "!Content-Type"})
    public void test() {
    }
}

註解@RequestMapping中屬性consumes的解釋和用法:


指定處理請求的提交內容型別(Content-Type),例如application/json, text/html;
----------------------------------------------------------


對映請求的可使用介質型別(資料型別ContentType),縮小主對映。
(1)格式是單一媒體型別或媒體型別的序列,僅當Content-Type匹配這些媒體型別之一時才對映請求。
 例子:
    consumes = "text/plain"
    consumes = {"text/plain", "application/*"}
(2)表示式可以通過使用“!”來取消 運算子,如“!text/plain”,匹配除“text/plain”之外的所有請求都帶有“Content-Type”。
(3)在型別級別和方法級別支援
    在型別級別使用時,所有方法級別對映都會覆蓋此消耗限制。

consumes例項:

@Controller
@RequestMapping("/Register")
public class Register{

    /**
     * headers的三種用法
     */
    @RequestMapping(value="/test", consumes={"text/plain", "application/*", "!pplication/application/x-www-form-urlencoded"})
    public void test() {
    }
}

註解@RequestMapping中屬性produces的解釋和用法:


指定返回的內容型別,僅當request請求頭中的(Accept)型別中包含該指定型別才返回;
----------------------------------------------
使用方法與consumes一樣