@RequestMapping是springmvc核心註解之一,主要作用是建立請求URL與請求方法之間的映射關係,每當客戶端有請求發過來,就根據請求URL找到對應的方法反射進行調用。
//該註解可以作用在類上和方法上,最終的URL是註解在類的路徑與註解在方法上的路徑結合。
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
//對請求方法的描述,比如可以說明該請求方法的作用啊啥的
String name() default "";
//URL,springmvc就是會根據該值與對應的方法進行映射。
@AliasFor("path")
String[] value() default {};
//與value屬性互爲別名,作用一樣。
@AliasFor("value")
String[] path() default {};
//請求方法
RequestMethod[] method() default {};
//必須的參數列表。
String[] params() default {};
//必須的請求頭
String[] headers() default {};
//用於指定該請求可以接收的正文類型(MIME類型)
String[] consumes() default {};
//用於指定可以生成的響應正文類型
String[] produces() default {};
}
demo初始化環境是 SpringMVC註解驅動開發 時配置的環境。
註解屬性詳解
String[] value() default {}; 和 String[] path() default {};
這兩個屬性互爲別名,作用一樣,都是指定URL與對應的方法的映射,是數組,可以指定多個URL,也就是多個請求可以映射到同一個方法。
@Controller
public class RequestMappingController {
@RequestMapping(value = {"/testRequestMapping","/testRequestMapping1"})
public String testRequestMapping(String name,String value){
System.out.println(name);
System.out.println(value);
return "RequsetMappingDemo";
}
}
點擊哪個連接都能進入該方法,並打印出name和value的值。
RequestMethod[] method() default {};
指定請求允許的方法,不指定使用默認值時,默認支持所有的請求方法。可以指定允許多種請求方法。
jsp修改:使用表達提交一個post請求。不指定method屬性時,get、post都能進行訪問。
method屬性的值是RequestMethod 枚舉。裏面封裝了多種HTTP請求方法。
public enum RequestMethod {
GET,
HEAD,
POST,
PUT,
PATCH,
DELETE,
OPTIONS,
TRACE;
private RequestMethod() {
}
}
指定請求方法只能爲GET請求。
結果使用get請求的a鏈接訪問成功,使用post請求的表單提交報405錯誤。
method是數組類型,可以指定支持的多種方法。
String[] params() default {};
該註解指定請求必須要帶有指定的參數,否則就會報400錯誤。
由於指定了請求必須帶有name和value參數,而請求只有name參數,所以報錯。
帶上value參數就請求成功了
String[] headers() default {};
與params屬性類似,指定請求必須要帶有某些請求頭才能訪問成功,如果缺少,就報404。
加上aaa請求頭,訪問成功。
String[] consumes() default {};
用於指定服務器可以接收的MIME類型。consume是消費的意思,也就意味着服務器能消費的MIME類型。如果不指定表示可以消費任意的類型。
指定只能消費application/text類型。
然後請求發過去application/x-www-form-urlencoded的類型。
報415,不支持的類型。
添加指定支持application/x-www-form-urlencoded類型。
String[] produces() default {};
這個屬性用於指定生成的正文類型,如果這個類型在請求的Accept頭指定的請求可接收類型中不存在這個類型的話,就會報錯。
指定生成application/json正文,請求卻只接收text/html,所以會報錯。
指定能生成text/html正文。
請求成功:
RequestMapping衍生註解
RequestMapping註解一共有5個衍生註解,分別是GetMapping、PostMapping、DeleteMapping、PutMapping、PatchMapping。
分別代表五種HTTP請求方法的註解。這是爲了更加擁抱Restful風格API編寫的註解,在spring4.3後出現。使用方法與RequestMapping註解類似。也有一定的區別,以GetMapping講解爲例。
@GetMapping:接收Get請求方法的RequestMapping。
//與RequestMapping註解不同的是,衍生註解只能作用於方法上。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
//只GET請求方法
@RequestMapping(method = RequestMethod.GET)
public @interface GetMapping {
//以下屬性分別與RequestMapping註解的屬性互爲別名,作用一樣。
@AliasFor(annotation = RequestMapping.class)
String name() default "";
@AliasFor(annotation = RequestMapping.class)
String[] value() default {};
@AliasFor(annotation = RequestMapping.class)
String[] path() default {};
@AliasFor(annotation = RequestMapping.class)
String[] params() default {};
@AliasFor(annotation = RequestMapping.class)
String[] headers() default {};
@AliasFor(annotation = RequestMapping.class)
String[] consumes() default {};
@AliasFor(annotation = RequestMapping.class)
String[] produces() default {};
}