@RequestMapping注解的功能
- 用于将请求和处理请求的控制器方法管理起来,建立映射关系
- SpringMVC接收到请求后会通过映射关系来寻找控制器方法处理请求
@RequestMapping标识的位置
- 标记在类上
- 标记在类上的RequestMapping会为它的方法再加一层,设置的是映射请求路径的初始信息
- 标记在方法上
- 标记在方法上,就是设置映射请求路径的具体信息
- 可能不太好理解,举个例子
- 我有一个hello类,它是控制器组件,它一开始没有标记@RequestMapping,我在它的sayhello()中标记了@RequestMapping(“/sayhello”)
- 我原先
url="http://localhost:8080/sayhello"
就能匹配到这个处理方法 - 现在我在hello类上表示@RequestMapping(“/hello”)
- 那我只有
url="http://localhost:8080/hello/sayhello"
才能匹配到这个处理方法了
@RequestMapping注解的属性
- RequsetMapping中的属性设置的越多,请求匹配的越精确
- value属性
@RequestMapping(value = {"/"})
,这样写也是可以的@RequestMapping("/")
,value属性是必须要设置的- 通过请求的请求路径匹配请求
- 它是一个数组,表示一个RequestMapping(“value1,value2”)它可以匹配多个url,就是一个处理方法可以用来处理多个url的请求
- method属性
- 表示匹配请求方式,在value的基础上进一步匹配,一般请求默认都是get,除了表单可以设置post提交方式
- 它也是一个枚举类数组(RequestMethod.GET,RequestMethod.POST,…),可以匹配多个请求方式
@RequestMapping(value = {"/"},method = {RequestMethod.GET})
,同时满足value和method才能匹配到这个处理方法
- 与method属性性质类似的@RequestMapping的派生注解
- @GETMapping,POSTMapping…
- 效果和设置method属性一样,只要给方法打上这些注解,然后设置它的value值就行,不用设置method了
- param属性(在value和method的匹配上进行参数匹配,了解,不常用,网上搜吧)
- header属性(请求头匹配,了解,不常用)
- SpringMVC支持ant风格路径,可以使用特殊字符匹配,在value属性中使用
?
表示任意单个字符 如果是/? 那么就会匹配/a /b /c …*
表示任意0个或者多个字符(不包括?和/)**
表示任意层数的目录,在使用**
的时候只能使用/**/xxx
的格式 中间**
就表示多层目录,**
前后不能有任何其他字符
- SpringMVC支持路径占位符(重点)
- 通过路径中的占位符将参数传递给处理方法
- 在url路径中用使用占位符 比如"/hello/{id}/{name}"
- 如果请求路径是"/hello/1/张三",那么参数值为id=1,name=张三
- 我们可以直接获取参数
@RequestMapping("/hello/{id}/{name}")
public String protal(@PathVariable("id") Integer id,@PathVariable("name") String username){
System.out.println(id);
System.out.println(username);
return "sucess";
}
- 打印结果是1和张三,使用@PathVarialbe注解来指定参数的对应关系,比如username和路径中的占位符name对应
- 通过路径中的占位符将参数传递给处理方法