@RequestMapping注解详细解析

@RequestMapping注解的功能

@RequestMapping 注解用于将请求和处理请求的控制器方法关联起来,建立映射关系
SpringMVC接收到指定的请求,就会来找到在映射关系中对应的控制器方法开处理这个请求。

注解位置

  1. 类:设置映射请求的请求路径的初始信息
  2. 方法:设置映射请求的请求路径的具体信息
  3. 类与方法:类上添加注解配合方法上注解,准确的找到处理请求的方法

注解属性

属性作用
value通过请求的请求地址匹配请求映射
method通过请求的请求方式(get或post)匹配请求映射
params通过请求的请求参数匹配请求映射
headers通过请求的请求头信息匹配请求映射

value

  • value属性通过请求的请求地址匹配请求映射

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

  • value属性必须设置,至少通过请求地址匹配请求映射

@RequestMapping(value = {"/page1", "/page2", "page3"})
public String toPage(){
	return "page";
}

此时访问page1、page2、page3都可以访问到page页面。

method

  • method属性通过请求的请求方式(getpost)匹配请求映射
  • method属性是一个RequestMethod类型的数组,表示该请求映射能够匹配多种请求方式的请求
  • 若当前请求的请求地址满足请求映射的value属性,但是请求方式不满足method属性,则浏览器会报405错误:Request method ‘POST’ not supported
  • 如果不设置method属性,那么无论是GET还是POST都可以访问。
@Controller
public class HelloController {

	/*添加请求方式必须为POST请求*/
	@RequestMapping(value = "/",method = RequestMethod.POST)
	public String toIndex(){
		/*返回视图名称,刚才配置文件会自己给他加前缀/WEB-INF/templates/和后缀.html*/
		return "index";
	}
    
	@RequestMapping(value = {"/page1", "/page2", "page3"})
	public String toPage(){
		return "page";
	}
} 

在这里插入图片描述

  1. 对于处理指定请求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生注解:

    • 处理get请求的映射 —> @GetMapping
    • 处理post请求的映射 —> @PostMapping
    • 处理put请求的映射 —> @PutMapping
    • 处理delete请求的映射 —> @DeleteMapping
  2. 常用的请求方式有get、post、put、delete
    但是目前浏览器只支持getpost,若在form表单提交的时候,为method设置了其他请求方式(putdelete),则默认按照get的请求方式处理。
    若要发送putdelete请求,则需要通过spring提供的过滤器HiddenHttpMethodFilter

params

  • params属性通过请求的请求参数匹配请求映射
  • params属性是一个字符串类型的数组,可以通过四种表达式设置请求参数和请求映射的匹配关系:
    • "param":要求请求映射所匹配的请求必须携带param请求参数
    • "!param":要求请求映射所匹配的请求必须不能携带param请求参数
    • "param = value":要求请求映射所匹配的请求必须携带param请求参数且param = value
    • "param != value":要求请求映射所匹配的请求必须携带param请求参数但是param != value
@RequestMapping(
        value = {"/page1", "page2", "page3"},
        method = {RequestMethod.GET, RequestMethod.POST},
        params = {"username=ZhShy","password!=123456"}
)
public String toPage(){
    return "page";
}

headers

  • headers属性通过请求的请求头信息匹配请求映射
  • headers属性是一个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系:
    • "header":要求请求映射所匹配的请求必须携带header请求头信息
    • "!header":要求请求映射所匹配的请求必须不能携带header请求头信息
    • "header = value":要求请求映射所匹配的请求必须携带header请求头信息且header = value
    • "header != value":要求请求映射所匹配的请求必须携带header请求头信息且header != value
  • 若当前请求满足@RequestMapping注解的valuemethod属性,但是不满足headers属性,此时页面显示404错误,即资源未找到
@RequestMapping(
        value = {"/page1", "page2", "page3"},
        method = {RequestMethod.GET, RequestMethod.POST},
        params = {"username=ZhShy","password!=123456"},
        headers = {"Connection=keep-alive"}
)
public String toPage(){
    return "page";
}

ant风格路径

  • ?:表示任意的单个字符
  • *:表示任意的0个或多个字符
  • **:表示任意的一层或多层目录
    注意:在使用**时,只能使用/**/xxx的方式
    @RequestMapping("a?a/*")
    public String toDemo(){
        return "demo";
    }

// aba/
// aca/asdasdasdas

    @RequestMapping("**/hello")
    public String toDemo(){
        return "demo";
    }

// hello
// asd/asdasde/fsdrte/ade/hello

占位符

对于传参的方式,我们原始的做法是:

/loginusername=Keeling&password=123456

但是我们其实还有一种rest传参的做法:

/login/Keeling/123456

SpringMVC路径中的占位符常用于restful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以再对于的@RequestMapping注解的value属性中通过占位符 {xxx} 表示传输的数据,在通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参。

  1. 首先在注解中使用{xxx}占位
  2. 在方法的参数中使用@PathVariable("xxx") 类型 变量名
    @RequestMapping("/demo/{username}/{password}")
    public String toPath(@PathVariable("username") String username,
                         @PathVariable("password") String password){
        System.out.println("username = "+username);
        System.out.println("password = "+password);
        return "demo";
    }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhShy23

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值