SpringMVC之@RequestMapping註解及其衍生註解詳解

@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 {};

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章