基于SpringMVC|基于SpringMVC @RequestMapping的参数和用法
@RequestMapping的参数和用法
RequestMapping里面的注解包含的参数如图:
文章图片
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@RequestMapping 除了修饰方法, 还可来修饰类 :
类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录;
方法处:提供进一步的细分映射信息。 相对于类定义处的 URL。
若类定义处未标注 @RequestMapping,则方法处标记的 URL相对于 WEB 应用的根目录
返回ModelAndView时的url会根据你的 @RequestMapping实际情况组成。
如果类上没有映射,那么url直接就是方法的映射;否则url为类上+方法上映射路径组合。
对应项目jsp位置则是一级路径对应一级文件目录。
如url为/default/index对应项目中webapp/default/index.jsp
RequestMapping注解有六个属性,下面我们把她分成三类进行说明
【1】value, method
value
:指定请求的实际地址,指定的地址可以是URI Template 模式;
method
: 指定请求的method类型, GET、POST、PUT、DELETE等;
【2】consumes,produces
consumes
: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces
:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
【3】params,headers
params
: 指定request中必须包含某些参数值时,才让该方法处理。
headers
: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
测试示例如下:
【1】value||path
- JSP 页面
Test RequestMapping
- controller
@RequestMapping(value="https://www.it610.com/testRequestMapping" )public String testRequestMapping() {System.out.println("testRequestMapping"); return SUCCESS; }
成功返回success.jsp 。
Tips :若 href 属性值,不等于value值,则将提示404错误。
value的uri值为以下三类:
A) 可以指定为普通的具体值;
如下:
@RequestMapping("/testRequestMapping")
B) 可以指定为含有某变量的一类值(URI Template Patterns with Path Variables)–restful风格;
@RequestMapping("/testPathVariable/{id}")public String testPathVariable(@PathVariable Integer id2) {System.out.println("testPathVariable: " + id2); return SUCCESS; }
除了value还有path,二者效果等同,可以参考源码如下图:

文章图片
其中关于@PathVariable 有如下说明:
① 如果路径中的变量与方法中的变量名一致,可直接使用@PathVariable;
② 如果二者不一致,则使用@PathVariable(Variable)显示指定要绑定的路径中的变量 。
@PathVariable只能绑定路径中的占位符参数,且路径中必须有参数。
@PathVariable用法参考路径参数绑定参考
@RequestMapping("/testPathVariable/{id}")public String testPathVariable(@PathVariable("id") Integer id2) {System.out.println("testPathVariable: " + id2); return SUCCESS; }//路径中的 id 与 方法中的 id2 绑定
C) 可以指定为含正则表达式的一类值( URI Template Patterns with Regular Expressions);
@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\d\.\d\.\d}.{extension:\.[a-z]}")public void handle(@PathVariable String version, @PathVariable String extension) {// ...}}
【2】method
- JSP 页面
Test Method//href 默认为get 请求。
- controller–限制接收post 请求。
@RequestMapping(value = "https://www.it610.com/testMethod", method = RequestMethod.POST)public String testMethod() {System.out.println("testMethod"); return SUCCESS; }
- result as follows :
HTTP Status 405 - Request method ‘GET' not supported 。

文章图片
【状态码405表示:请求中指定的方法不被允许。】
将method 改为method = RequestMethod.GET正常跳转页面。
【3】consumes
- JSP 页面
默认contentType为Content-Type:application/x-www-form-urlencoded。

文章图片
- controller–限制接收post 请求以及consumes="application/json"。
@RequestMapping(value = "https://www.it610.com/testMethod", method = RequestMethod.POST,consumes="application/json")public String testMethod() {System.out.println("testMethod"); return SUCCESS; }
- result as follows :

文章图片
【状态码415表示:由于媒介类型不被支持,服务器不会接受请求。。】
去掉 consumes属性,页面正常跳转 !
【4】produces 后台代码如下:
@RequestMapping(value = "https://www.it610.com/testMethod", method = RequestMethod.POST,produces="application/json")public void testMethod2(HttpServletRequest request,HttpServletResponse response,Model model) throws IOException {request.getHeader("Accept"); System.out.println(request.getHeader("Accept")); //response.setContentType("application/json"); String username = request.getParameter("username"); System.out.println("testMethod..."+username); model.addAttribute("user", username); Object jsonString ="{'name': 'helloworlda'}"; JSONObject jsonobj=JSONObject.fromObject(jsonString); PrintWriter out = response.getWriter(); out.print(jsonobj); }
- 浏览器请求头
text/html,application/xhtml+xml,application/xml; q=0.9,image/webp,*/*; q=0.8
【基于SpringMVC|基于SpringMVC @RequestMapping的参数和用法】其中最后一项 : */*; q=0.8。
该项表明可以接收任何类型的,权重系数0.8表明如果前面几种类型不能正常接收。则使用该项进行自动分析。
application/json 几种主流浏览器都可以自动解析。
【5】params
- JSP页面
form action="springmvc/testParamsAndHeaders" method="POST">
参数 username=tom;age = 10;
- 后台代码:
@RequestMapping(value = "https://www.it610.com/article/testParamsAndHeaders", params = { "username","age!=10" })public String testParamsAndHeaders() {System.out.println("testParamsAndHeaders"); return SUCCESS; }
- result as follows :

文章图片
【状态码400表示:服务器未能理解请求。 】
- 将age 改为其他值,正常跳转。

文章图片
【6】headers
- 浏览器请求头如下:

文章图片
- 后台测试代码如下:
@RequestMapping(value = "https://www.it610.com/article/testParamsAndHeaders", params = { "username","age!=10" }, headers = { "Accept-Language=US,zh; q=0.8" })public String testParamsAndHeaders() {System.out.println("testParamsAndHeaders"); return SUCCESS; }
设定请求头中第一语言必须为US。
- result as follows :

文章图片
【状态码404表示:服务器无法找到被请求的页面。】
将后台代码改为zh-CN。。。

文章图片
页面正常跳转。
【Tips】: ① 服务器首先根据URL去找页面,如果找不到就返回404;
② 如果找到,但是不能正常处理,就会返回 5XX 类型错误。
其中在第一步过程中,会根据请求头进行一系列判断 !
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 基于|基于 antd 风格的 element-table + pagination 的二次封装
- 基于爱,才会有“愿望”当“要求”。2017.8.12
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- 韵达基于云原生的业务中台建设 | 实战派
- EasyOA|EasyOA 基于SSM的实现 未完成总结与自我批判
- 基于stm32智能风扇|基于stm32智能风扇_一款基于STM32的智能灭火机器人设计
- stm32|基于STM32和freeRTOS智能门锁设计方案
- Python|Python 基于datetime库的日期时间数据处理