SpringMVC基础-@RequestMapping

1.概述
*一个客户端请求会导致后台调用一个控制器(每个控制器的方法可以认为是一个控制器),RequestMapping就是这样的作用,
 帮助请求和控制直接的配对.然而需要精确的匹配就需要更多精细的参数的匹配.我们知道,一个请求包括:请求行,请求头,和请求体(不了解的可以先了解HTTP),
 我们可以根据这三部分来指定请求和控制器的匹配.RequestMapping中的配置参数起过滤的作用.
 
*这里的参数都有{}表示可以配置多个参数,当仅配置单个参数的时候,我们直接使用字符串也可以,可以不用{}包裹

2.配置参数

@RequestMapping(value={}, method={}, params={}, headers={}, consumes={}, produces={} )

(1)value: 指的是请求的真实路径
(2)method:请求方式,也就是GET,POST等动词
(3)params:请求路径URL path路径参数(不是HTTP请求的body带的参数),也就是使用&分隔符分隔的参数键值对,例如myParam=myValue
(4)headers:标准HTTP请求头,例如content-type=text/*
(5)consumes:互联网媒体类型,一般就是我们所说的MIME类型,用来确定请求的内容类型或响应的内容类型。
            根据Content-Type来匹配
(6)produces:表示将功能处理方法将生产什么样格式的响应数据,此时根据请求头中的Accept进行匹配
            例如:produces = "application/json",表示将功能处理方法将生产json格式的数据,此时根据请求头中的Accept进行匹配,
            如请求头“Accept:application/json”时即可匹配

3.使用
@RequestMapping可以在两个地方配置,
(1)在控制器类中,它的作用域是整个控制器的所有方法
(2)在控制器的方法,仅对使用的控制器方法有效
   例如:@Controller
        @RequestMapping("/mapping")
        public class RequestMappingController {
          @RequestMapping(value = {"path1", "path2"})
          public String multiMapping(HttpServletRequest req, Model model) {
            model.addAttribute("path", req.getRequestURL());
            return "request/multiMapping";
          }
          //code

        }

4.example

(1)value的测试

代码

	@RequestMapping(value = {"path1", "path2"})
	public String multiMapping(HttpServletRequest req, Model model) {
		model.addAttribute("path", req.getRequestURL());
		return "request/multiMapping";
	}
我们配置了 多个value值,也就是该控制器方法对应对个请求路径

测试结果



当非/path1 和/path2的指,会出现404


(2)methods

代码

	@RequestMapping(value = "methods", method = { RequestMethod.GET, RequestMethod.POST })
	public String methodsMapping(HttpServletRequest req, Model model) {
		model.addAttribute("method", req.getMethod());
		return "request/methodsMapping";
	}


结果


可以换非GET和POST测试请求将会失败


(3)params

代码

	@RequestMapping(value = "params", params = { "id=007", "name" })
	public String paramsMapping(HttpServletRequest req, Model model) {
		model.addAttribute("id", req.getParameter("id"));
		model.addAttribute("name", req.getParameter("name"));
		return "request/paramsMapping";
	}
该配置表示请求URL需要带有id=007的参数,并且需要一个name的参数,name的参数值没有限定,可以有也可以没有
结果


此时的后台抛出来的异常


(4)headers

代码

	@RequestMapping(value = "headers", headers = { "content-type=text/html" })
	public String headersMapping(HttpServletRequest req, Model model) {
		model.addAttribute("contentType", req.getHeader("content-type"));
		return "request/headersMapping";
	}

结果

当请求头中没有Content-Type="text/html"的时候


此时后台抛出异常

然后我们使用浏览器的开发工具重新编辑请求,加入Content-Type, 然后重新发送请求.

然后我们就可以得到200的成功请求


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值