目录

1. @RequestMapping注解的功能

2. @RequestMapping注解的位置

3. @RequestMapping注解的value属性

4. @RequestMapping注解的method属性

5.SpringMVC支持路径中的占位符(重点)


1. @RequestMapping注解的功能

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

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

2. @RequestMapping注解的位置

首页index.html有了,我们就要去控制器写一个控制器方法,访问首页,请求路径就是"/",返回一个String。

当我们的浏览器发送请求到服务器,DispatcherServlet来接收到请求,就会将请求地址和控制器方法所使用的注解@RequestMapping()的value属性值进行匹配,如果能匹配成功,那么这个方法就是处理请求的方法,而在这个方法里返回的字符串是视图名称,这个可以由视图解析器解析,加上视图前缀和后缀找到相对应的页面,然后通过thymeleaf解析之后,响应到浏览器。

@RequestMapping("/")
public String index(){return "index";
}

浏览器所解析的路径少了上下文路径,用thymeleaf里的@{/testRequestMapping}所包括的路径,会自动添加上下文路径。

<a th:href="@{/testRequestMapping}">测试RequestMapping注解的位置</a><br>

此时去跳转是没有问题的


但是此时我们在类上面也去添加一个@RequestMapping,会发生什么?

此时报了404错误,因为在类上面加了个@RequestMapping注解:

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

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

既然有初始信息和具体信息,那么类上有注解,类的方法上也有注解,那我们就需要先访问初始信息,才能访问具体信息,此时请求路径就变为:

这里说明一下为什么要在类上面添加一个RequestMapping

举个例子:当有用户模块和订单模块都是list的时候,我们的控制器@RequestMapping重名了,此时只能换个名字,但是只有这个名字可以更好的表示我们整个方法的意思,此时只需要在类上面加个RequestMapping用来表示一个类,下面的方法就不会与其他控制器发生命名冲突。


3. @RequestMapping注解的value属性

@RequestMapping注解的value属性通过请求的请求地址匹配请求映射

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

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


那么我们用Ctrl+鼠标左键点击@RequestMapping这个注解,进去看一看,按ALT+7查看类中的所有方法列表

可以看到value()是个数组,那么也就是说我们在顶上配置value注解的时候可以设置一个数组

@Controller
public class RequestMappingController {@RequestMapping({"/testRequestMapping","/test"})public String success(){return "success";}
}
<a th:href="@{/testRequestMapping}">测试RequestMapping注解的value属性-->/testRequestMapping</a><br>
<a th:href="@{/test}">测试RequestMapping注解的位置-->/test</a><br>

此时"/testRequestMapping","/test"这两个都可以跳转到success页面,也就是说前端发送过来的请求,只要是这两个中的其中一个就可以跳转到响应的页面

也就是说,这里所表示的不是一个请求有2个地址,而是说当前的RequestMapping能够匹配的地址可以有多个,只要满足数组中的任意一个,就可以被当前请求映射所处理。

4. @RequestMapping注解的method属性

在之前的学习中,method属性在表单提交的时候有出现过,就是请求方式。

@RequestMapping注解的method属性通过请求的请求方式(get或post)匹配请求映射。

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


我们在之前的前端页面中修改一下

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>首页</h1><a th:href="@{/hello/testRequestMapping}">测试RequestMapping注解的位置</a><br><a th:href="@{/testRequestMapping}">测试RequestMapping注解的value属性-->/testRequestMapping</a><br><a th:href="@{/test}">测试RequestMapping注解的value属性-->/test</a><br><a th:href="@{/test}">测试RequestMapping注解的method属性-->/GET</a><br><form th:action="@{/test}" method="post"><input type="submit" value="测试RequestMapping注解的mathod属性-->POST"></form>
</body>
</html>

此时Controller中没有配置是POST请求还是GET请求,这时候去访问,会发现这两个请求都可以。


当我们去@RequestMapping中的注解写method这个属性,这也是一个数组形式,请求的请求方式满足请求映射的method属性,就可以。

@Controller
public class RequestMappingController {@RequestMapping(value={"/testRequestMapping","/test"},method={RequestMethod.GET})public String success(){return "success";}
}

此时将method换成GET请求,去点击POST的请求方式,那么会报405错误。

如果想让请求映射支持POST请求和GET请求,那么就可以这样写。

注:

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

处理get请求的映射-->@GetMapping

处理post请求的映射-->@PostMapping

处理put请求的映射-->@PutMapping

处理delete请求的映射-->@DeleteMapping

2、常用的请求方式有get,post,put,delete

但是目前浏览器只支持get和post,若在form表单提交时,为method设置了其他请求方式的字符串(put或delete),则按照默认的请求方式get处理,若要发送put和delete请求,则需要通过spring提供的过滤器HiddenHttpMethodFilter,在RESTful部分会讲到

5.SpringMVC支持路径中的占位符(重点)

原始方式:/deleteUser?id=1

rest方式:/deleteUser/1

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

<a th:href="@{/testRest/1/admin}">测试路径中的占位符-->/testRest</a><br>
@RequestMapping("/testRest/{id}/{username}")
public String testRest(@PathVariable("id") String id, @PathVariable("username") String username){System.out.println("id:"+id+",username:"+username);return "success";
}
//最终输出的内容为-->id:1,username:admin

也就是说,这种问号携带参数的风格,被替换为另一种风格,特别是在后期的RESTful里面,这种风格是很常见的,只要前端传过来值,在Controller中的@RequestMapping注解里都用/{xxx}/{xxx}这种方式,并且参数还要用@PathVariable来进行修饰。

RequestMapping注解相关推荐

  1. spring mvc -@RequestMapping注解详解

    https://www.cnblogs.com/caoyc/p/5635173.html @RequestMapping参数说明: value:定义处理方法的请求的URL地址(重点): method: ...

  2. SpringMVC框架 学习DAY_03:@RequestMapping注解/拦截器与过滤器

    1. 关于@RequestMapping注解 在控制器中,在处理请求的方法之前添加@RequestMapping注解,可以配置请求路径与处理请求的方法的映射关系! 在@RequestMapping注解 ...

  3. 003_Controller和RequestMapping注解

    1. 控制器默认支持的参数类型 1.1. 直接在控制器方法形参上定义HttpServletRequest.HttpServletResponse.HttpSession和Model/ModelMap类 ...

  4. Spring MVC @RequestMapping注解详解

    @RequestMapping 参数说明 value:定义处理方法的请求的 URL 地址.(重点) method:定义处理方法的 http method 类型,如 GET.POST 等.(重点) pa ...

  5. SpringMVC RequestMapping注解详解

    2019独角兽企业重金招聘Python工程师标准>>> @RequestMapping注解的作用是对用户的请求映射到指定的控制器或方法,所以该注解可以用来修饰类和方法,在Reques ...

  6. RequestMapping注解的作用

    源码: @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented ...

  7. RequestMapping注解的继承问题

    @RequestMapping注解被用来注明访问路径,例如: @RequestMapping("/data") @RequestMapping("/user/list&q ...

  8. SpringMVC之@RequestMapping注解及其衍生注解详解

    @RequestMapping是springmvc核心注解之一,主要作用是建立请求URL与请求方法之间的映射关系,每当客户端有请求发过来,就根据请求URL找到对应的方法反射进行调用. //该注解可以作 ...

  9. (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解

    http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...

  10. SpringMVC框架----RequestMapping注解

    作用:用于建立请求 URL 和处理请求方法之间的对应关系 客户端会发一个请求过来,后台会有一个方法去执行它,现在我们需要把请求地址路径和我们的方法建立一个映射关联,发了请求,我们的方法就执行. Req ...

最新文章

  1. iOS :UIPickerView reloadAllComponets not work
  2. 让Python pip下载速度加速
  3. HOW TO ORDER LFT
  4. 在java中会存在内存泄漏吗?
  5. python---os
  6. java 2d 教程_Java 2D开发技巧之“灯光与阴影”
  7. 使用FTP下载文件connect.retrieveFileStream(filename) 获取不到InputStream流,返回null的问题
  8. Jupyter简易上手的安装与使用教程
  9. axure怎样24位bmp输出_【白皮书】使用24位设备进行基础应变测量
  10. Vue给单独页面添加背景色
  11. Django权限管理测试
  12. stdafx.h到底有什么用
  13. 图解如何在IIS上部署Asp.Net(.NET5.0)网站,新手必看!!!
  14. 【评分卡开发】信用评分模型构建流程
  15. 2021年中国全自动棉纱缠绕机市场趋势报告、技术动态创新及2027年市场预测
  16. SCSI总线和协议以及SAN存储网络详解
  17. Gulp老矣 尚能饭否
  18. Nginx返回411错误
  19. python获取数组中最多的元素(用max函数)
  20. GPT分区-----Linux系统

热门文章

  1. 自动驾驶中常用传感器作用
  2. 飞行器仿真软件开发——3Dmax实现飞行器模型开发
  3. Markdown语法中输入数学公式(MathJax)及特殊符号
  4. EA周报 | 微软确认明年在华将扩招上千职位;联想日本员工东京奥运期间 19 天不用去公司;腾讯全面公开整体开源路线图;...
  5. dede织梦建立独立内容模型
  6. 代码坏味道与重构之中间人和内幕交易
  7. lamp管理 centos_基于web图片素材管理搭建
  8. 【免费好用有关图片的API】
  9. 若依代码生成器的使用
  10. 谈谈国外互联网公司的骨干网