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