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

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