赵走x博客
网站访问量:151847
首页
书籍
软件
工具
古诗词
搜索
登录
32、使用MyBatis注解实现数据库操作
31、MyBaties使用XML配置文件实现数据库操作
30、Spring Boot构建MyBatis应用程序
29、MyBatis简介
28、实战:实现JdbcTemplate多数据源
27、使用JdbcTemplate操作数据库
26、JdbcTemplate入门
25、实战:实现Web API版本控制
24、使用Swagger生成Web API文档
23、Thymeleaf页面布局
22、Thymeleaf内置对象、内嵌变量
21、Thymeleaf内联
20、Thymeleaf语法
19、Thymeleaf表达式
18、Thymeleaf入门
17、全局异常处理
16、实战:实现优雅的数据返回
15、跳转指定页面
14、Spring Boot静态资源
13、Spring Boot数据转换配置
12、跨域访问
11、Web配置
10、过滤器
9、拦截器
8、数据验证
7、参数传递
6、URL映射
5、@ResponseBody
4、@RequestMapping
3、@Controller和@RestController
2、Web项目结构
1、spring-boot-starter-web介绍
6、URL映射
资源编号:551765
热度:106
6、URL映射
上一节介绍了Spring Boot对Web项目开发都做了哪些支持,还介绍了@Controller和@RestController等注解,那么Spring Boot是如何将HTTP请求映射到具体方法的呢? Spring Boot支持URL路径匹配、HTTP Method匹配、params和header匹配等URL映射。 本节开始介绍Spring Boot的URL映射。 # 一、URL路径匹配 ### 1. 精确匹配 @RequestMapping的value属性用于匹配URL映射,value支持简单表达式: ``` @RequestMapping("/getDataById/{id}") public String getDataById(@PathVariable("id") Long id) { return "getDataById:"+id ; } ``` 在上面的示例中,@PathVariable注解作用在方法参数中,用于表示参数的值来自URL路径。如果URL中的参数名称与方法中的参数名称一致,则可以简化为: ``` @RequestMapping("/getDataById/{id}") public String getDataById(@PathVariable Long id) { return "getDataById:"+id ; } ``` 在上面的示例中,当在浏览器中访问/getDataById/1时,会自动映射到后台的getDataById方法,传入参数id的值为1。 ### 2. 通配符匹配 @RequestMapping支持使用通配符匹配URL,用于统一映射某些URL规则类似的请求,示例代码如下: ``` @RequestMapping("/getJson/*.json") public String getJson() { return "get json data"; } ``` 在上面的示例中,当在浏览器中请求/getJson/a.json或者/getJson/b.json时都会匹配到后台的Json方法。 @RequestMapping的通配符匹配非常简单实用,支持`* ? **`等通配符。使用时需要了解通配符的匹配规则,否则容易出错。通配符匹配规则如下: - 1)符号`*`匹配任意字符,符号`**`匹配任意路径,符号`?`匹配单个字符。 - 2)有通配符的优先级低于没有通配符的,比如/user/add.json比/user/*.json优先匹配。 # 二、Method匹配 HTTP请求Method有GET、POST、PUT、DELETE等方式。HTTP支持的全部Method和说明如表4-1所示。  对于Web应用,GET和POST是经常使用的选项,而对于RESTful接口,则会使用PUT、DELETE等从语义上进一步区分操作。 @RequestMapping注解提供了method参数指定请求的Method类型,包括RequestMethod.GET、RequestMethod.POST、RequestMethod.DELETE、RequestMethod.PUT等值,分别对应HTTP请求的Method。示例代码如下: ``` @RequestMapping(value="/getData",method = RequestMethod.GET) public String getData() { return "RequestMethod GET"; } @RequestMapping(value="/getData",method = RequestMethod.POST) public String PostData() { return "RequestMethod POST"; } ``` 上面的示例实现了GET和POST两种方式。当使用GET方式请求/data/getData接口时,会返回“RequestMethod GET”,使用POST方式请求/data/getData接口时,则返回“RequestMethod POST”,说明@RequestMapping通过HTTP请求Method映射不同的后台方法。 # 三、consumes和produces匹配 @RequestMapping注解提供了consumes和produces参数用于验证HTTP请求的内容类型和返回类型。 consumes表示请求的HTTP头的Content-Type媒体类型与consumes的值匹配才可以调用方法。 produces表示HTTP请求中的Accept字段只有匹配成功才可以调用。下面通过示例演示consumes和produces参数的用法。 ``` //处理request Content-Type为“application/json”类型的请求 @RequestMapping(value = "/Content", method = RequestMethod.POST, consumes = "application/json") public String Consumes(@RequestBody Map param) { return "Consumes POST Content-Type=application/json"; } ``` 上面的示例只允许Content-Type=application/json的HTTP请求映射此方法,其他类型则返回“Unsupported Media Type”的错误。 # 四、params和header匹配 @RequestMapping注解提供了header参数和params参数,通过header参数可以根据HTTP请求中的消息头内容映射URL请求,通过params参数可以匹配HTTP中的请求参数实现URL映射。 ### 1. params Spring Boot除了通过匹配URL和Method的方式实现映射HTTP请求之外,还可以通过匹配params的方式来实现。 Spring Boot从请求参数或HTTP头中提取参数,通过判断参数,如params="action=save"确定是否通过。同时还可以设置请求参数包含某个参数、不包含某个参数或者参数等于某个值时通过,具体如下: - 1)params={"username"},存在“username”参数时通过。 - 2)params={"!password"},不存在“password”参数时通过。 - 3)params={"age=20"},参数age等于20时通过。 通过@PostMapping设置的params参数来检查请求的params,实现HTTP的URL映射。示例代码如下: ``` @RequestMapping(value="paramsTest",params="action=save") public String paramsTest(@RequestBody Map param){ return "params test"; } ``` 在上面的示例中,当请求的参数action=save时,映射此方法。 ### 2. header header的使用和params类似,它检查HTTP的header头中是否有Host=localhost:8080 的参数,如果有则匹配此方法。示例代码如下: ``` @RequestMapping(value="headerTest",headers={"Host=localhost:8080"}) public String headerTest() { return "header test"; } ```