springMVC請求註解@RequestMapping各個屬性值
1、RequestMapping介面的原始碼如下,裡面定義了七個屬性
(1)@Target
中有兩個屬性,分別為 ElementType.METHOD
和 ElementType.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一樣