SpringMVC中的`RequsetMapping`注解

@RequestMapper注解

1.@RequestMapping注解的作用就是将URL路径,将http请求地址映射到控制器controller类的处理方法上

2.@RequestMapping注解可以作用在控制器类上面,就是第一级的访问目录

3.@RequestMapping注解可以作用在控制器类中的方法上面,就是第二级的访问目录

4./:表示是虚拟目录【就是项目的根目录】

从注解名称上我们可以看到,@RequestMapper注解的作用就是将请求【就是浏览器请求】和处理请求的控制器方法关联起来,建立映射关系。

SpringMVC接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求

注意是:一个请求和一个映射关系是一一对应或都多个请求对应一个处理,否则会出现报错,不能一个请求对应多个映射,否则服务器不知使用那个映射处理

@RequestMapping标识一个类:设置映射请求的请求路径的初始信息

@RequestMapping标识一个方法:设置映射请求的请求路径的具体信息

案例

@Controller
@RequestMapping("/mapping")
public class MyController {

    // RequestMapping中的Value属性
    @RequestMapping(value = {"/value"})
    public String value(){
        // 返回跳转的视图名称
        return "/requestMapping/RequestMapping";
    }
}

1.@RequestMapping注解中的value属性

@RequestMapping注解中的value是一个字符串数组,源码如下

    @AliasFor("path")
    String[] value() default {};

由于value属性是一个字符串数组,表示该请求映射能够匹配多个请求地址所对应的请求

注意是:@RequestMapping注解的Value属性必须设置的,至少通过请求地址匹配请求映射

案例

@Controller
@RequestMapping("/mapping")
public class MyController {

    // RequestMapping中的Value属性
    @RequestMapping(value = {"/value","value2"})
    public String value(){
        // 返回跳转的视图名称
        return "/requestMapping/RequestMapping";
    }
}

就是通过http://localhost:8080/SpringMVC01_war_exploded/mapping/valuehttp://localhost:8080/SpringMVC01_war_exploded/mapping/value2都可以映射到控制器中的处理方法,说明一个映射方法可以处理多个请求地址所对应的请求

2.@RequestMapping注解中的method属性

@RequestMapping注解的method属性通过请求的请求方式getpost匹配请求映射

@RequestMapping注解的method属性是一个RequstMethod类型的数组,表示该请求映射能匹配多种请求方式的请求

注意是:如果该属性不设置,默认是支持7请求方式【就是不以请求方式】,如果设置了RequestMethod.GET,RequestMethod.POST表示只能匹配是GET请求或POST请求的方式

若当前请求的请求地址满足请求映射的value属性,但是请求方式不满足method属性,则浏览器报错405:表示不支持该请求:Request method 'POST' not supported【说明地址匹配,请求方式不对】

源码 :表示是一个映射可以处理多种请求

RequestMethod[] method() default {};

例如:案例
@RequestMapping(value = "/success",
            method = {RequestMethod.GET,RequestMethod.POST})
            
            一定要在`/success`资源路径匹配的情况,还要满足是`GET`请求或`POST`请求

案例

    // RequestMapping注解中的method属性
    // `/value`资源路径匹配的前提下, RequestMethod.POST,RequestMethod.GET表示只能是Post或Get请求才能访问到该处理方法
    @RequestMapping(value = {"/method"},method = {RequestMethod.POST,RequestMethod.GET})
    public String method(){
        System.out.println("Post请求方式");
        return "/requestMapping/success";
    }

3.@RequestMapping注解的Params属性

@RequestMapping注解的params属性通过请求的请求参数匹配请求映射

@RequestMapping注解的params属性是一个字符串类型的数组,可以通过四种表达式设置语法参数和请求映射的匹配关系【注意是:如果params属性有多个值,必须同时满足才能映射,否则会报400错误

`param`:要求请求映射所匹配的请求必须携带`param`请求参数

`!param`:要求请求映射所匹配的请求必须不能携带`param`请求参数

`param=value`:要求请求映射所匹配的请求必须携带`param`请求参数并且参数为`value`

`param!=value`:要求请求映射所匹配的请求必须携带`param`请求参数但是`param!=value`
案例:
@RequestMapping(value = "/param",params = {"param=admin"})
必须满足`/param`后,又同时满足参数必须有`param`属性并且值为`admin`

案例:

<!--传参方式:使用`?`-->
<a th:href="@{/param?param=admin}">测试param属性:必须要携带参数!</a>
<!--传参方式二:使用`()`在开发中推荐使用-->
<a th:href="@{/param(param=admin)}">测试param属性:必须要携带参数!</a>
	// 说明资源路径必须是`/param`,同时还必须携带`param`参数并且值为`admin`
    // 没有指明默认是转发
    @RequestMapping(value = "/param",params = {"param=admin"})
    public String params(){
        return "success";
    }
注:

若当前请求满足@RequestMapping注解的value和method属性,但是不满足params属性,此时页面回报错`400`:Parameter conditions "username, password!=123456" not met for actual request parameters: username={admin}, password={123456}

注意是:如果资源路径匹配,但是参数不匹配则会报400

4.@RequestMapping注解的headers属性

@RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射

@RequestMapping注解的headers属性是一个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系

"header":要求请求映射所匹配的请求必须携带header请求头信息

"!header":要求请求映射所匹配的请求必须不能携带header请求头信息

"header=value":要求请求映射所匹配的请求必须携带header请求头信息且header=value

"header!=value":要求请求映射所匹配的请求必须携带header请求头信息且header!=value

案例:

@RequestMapping(value = "/header",headers = {"Connection=keep-alive"})

说明请求的头必须有`Connection`属性,值为`keep-alive`,如果有多个请求头,多个请求头都必须都满足,使用和`method`一样

代码:

<!--测试请求头-->
<a th:href="@{/header}">测试header请求头,必须携带该请求头</a>
	// 说明资源路径必须是`/header`,同时还必须满足请求的头为:"Connection=keep-alive"
    // 没有指明默认是转发
    @RequestMapping(value = "/header",headers = {"Connection=keep-alive"})
    public String headers(){
        return "success";
    }

若当前请求满足@RequestMapping注解的value和method属性,但是不满足headers属性,此时页面显示404错误,即资源未找到

注意是:如果请求头有多个,则必须同时满足才能找到对应映射关系,否则报错404,和params的使用一样

5SpringMVC支持ant风格的路径【重点】

作用是:相当于模糊匹配一样

`?`:表示任意的单个字符 

`*`:表示任意的`0`个或多个字符 

`**`:表示任意的一层或多层目录【注意是:一定要写成`/**/XXX方式`,不能写成`/x**/XXX`否则会将`/**/`当成整体】

注意是:在使用**时,只能使用/**/xxx方式

案例:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>SpringMVCNet风格</title>
</head>
<body>
<a th:href="@{/success}">测试Net风格中的`?`</a>
</body>
</html>
    // 测试net风格中的`?`
    @RequestMapping("/a?a/success")
    public String net1(){
        return "springmvcNet";
    }

    // 测试net风格中的`*`
    @RequestMapping("/a*a/success")
    public String net2(){
        return "springmvcNet";
    }

    // 测试net风格中的`/**/`
    @RequestMapping("/**/success")
    public String net3(){
        return "springmvcNet";
    }

6.SpringMVC支持路径中的占位符(非常重要)

没有使用占位符方式:/user?id=1

使用占位符方式:/user/1

SpringMVC路径中的占位符常用于RESTful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符{XXX}表示传输的数据,在通过@PathVariable注解,将占位符所表示的数据赋值给控制器的方法形参【意思是:将传输占位符中的值赋值给形参】

例如:

例如  路径为:`/testRest/1/海康`
会将`1`传入`{id}`
会将`海康`传入`{username}`

最终将:`id`中的值赋值给`@PathVariable("id") String id`
最终将:`username`中的值`@PathVariable("username"`

@RequestMapping("/testRest/{id}/{username}")
public String testRest(@PathVariable("id") String id, @PathVariable("username") String username){}

案例:

传入地址栏是[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CKJvzts5-1652878812089)(D:\typora笔记\springmvc\img\1652673835577.png)]

	// 测试占位符
    @RequestMapping("/testRest/{id}/{username}")
    public String rest(@PathVariable("id")Integer id,@PathVariable("username")String username){
        System.out.println("id"+id+"\tusername"+username);
        return "success";
    }

注意是:form表单只能提交postget请求,如果自己写成putdelete将会不起为作用,将会使用form表单默认的方式get方式提交

RequestMapping注解源码

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
    String name() default "";

    @AliasFor("path")// 别名是path
    String[] value() default {}; 方法处理的访问资源路径

    @AliasFor("value")// 别名是 value
    String[] path() default {}; 方法处理的访问资源路径

    RequestMethod[] method() default {}; 请求映射的方法,例如post或get

    String[] params() default {}; 请求访问必须携带的参数

    String[] headers() default {}; 请求访问必须携带的请求头

    String[] consumes() default {};

    String[] produces() default {};
}
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值