@RequestMapping注解

@RequestMapping是一个用来处理请求地址到处理器controller功能方法映射规则的注解,这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法controller上,可用于类或方法上。注解在类上,表示类中的所有响应请求的方法都是以该地址作为父路径(模块路径)。

六个基本属性

属性名:               描述:
value(path)     指定请求的实际访问地址,默认@RequestMapping("url")的值url即为value的值。指定的地址可以是 URI Template 模式。
method                指定请求的method类型,主要有 GET、POST、DELETE、PUT等;
params                指定request中必须包含某些参数值,包含才让该方法处理请求。
headers               指定request中必须包含某些指定的header值,包含才能让该方法处理请求。
consumes           指定处理请求的提交内容类型(Content-Type),例如:application/json, text/html;
produces             指定返回的内容类型,当且仅当request请求头中的(Accept)类型中包含该指定类型才返回;

@RequestMapping注解的使用

1. @RequestMapping加到类上(给模块命名地址)

访问该类下的所有方法都需要有一个地址前缀 /test+具体方法的path/value才能访问

@Controller
@RequestMapping("test")
public class RequestMappingController {}

2. @RequestMapping写在方法上

2.1 直接写字符串值/value/path,调用当前项目地址/模块/testMapping访问,

 @RequestMapping("testMapping")public String testMapping(){return "requestmappingsuccess";//视图解析器前后缀拼接返回页面地址}
//或者下面方法都行
@RequestMapping(value = "testMapping")
@RequestMapping(path = "testMapping")

2.2 配置多个链接映射

//通过 /test1 /test2 /test3 和/testurl/下的所有子模块 都能访问
@RequestMapping({"/test1","/test2","/test3","testurl/*"})
@RequestMapping(value = {"/test1","/test2","/test3",,"testurl/*"})
@RequestMapping(path = {"/test1","/test2","/test3",,"testurl/*"})

2.2 method属性的使用

method如果不设置,任何属性都可以访问到,如果设置了,只能访问到设置的提交方式的请求方式。

4种取值:

RequestMethod.GET
        RequestMethod.POST
        RequestMethod.PUT
        RequestMethod.DELETE

如果设置了method的值,就只能支持设置值的请求方式,其它请求方式不支持,就会报405错误 – Method Not Allowed

//设置只支持post请求
@RequestMapping(path="testMethod",method = {RequestMethod.POST})
//设置只接收get请求
@RequestMapping(path="testMethod",method = {RequestMethod.GET})

2.3 param属性

指定request中必须包含某些参数值,包含才让该方法处理请求。

//请求中必须要有参数username(页面中的name值),且参数值要为striveday才执行该方法
@RequestMapping(value="/testParam", params="username = strivedaay")
//请求中必须要有参数username(页面中的name值),且参数值不为striveday才执行该方法
@RequestMapping(value="/testParam", params="username != strivedaay")

2.4 headers属性

指定request请求作用域中必须包含某些指定的header值,包含才能让该方法处理请求。

    @RequestMapping(value="testHeaders",headers={"context-type=text/plain","context-type=text/html"})public String testHeaders(){}

上述访问,如果请求头中不包含context-type=text/plain,context-type=text/html这两个属性,那么就不能访问到该方法,报404错误。

2.5 consumes属性

cousumes的样例:

@Controller
@RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {    // implementation omitted
}

方法仅处理request Content-Type为“application/json”类型的请求。

2.6 produces属性

produces的样例:

@Controller
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public Pet getPet(@PathVariable String petId, Model model) {    // implementation omitted
}

方法仅处理request请求中Accept头中包含了"application/json"的请求,同时暗示了返回的内容类型为application/json;

------------------------------------------------------------------------------------------

2.7 配合使用@RequestParam设置请求参数【url中的?后面参数可以用@RequestParam

@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性。@RequestParam也可用于除GET外其它类型的请求,例如:POST、DELETE等请求。

使用@RequestParam可以将HTTP请求参数绑定到controller中方法的参数上,实现页面传入参数(name的值)和方法接收参数列表的形式参数名不一致也能进行参数绑定(赋值)

@RequestParam注解有三个属性value:注解中value值要和页面传入的参数名一致。required : 默认值为true,表示该参数必须给值 ,如果没有给这个值,则出现400页面。defaultValue = “striveday” :如果给了参数,就获取,如果没有给参数,则默认为striveday。【小技巧1】@RequestParam默认情况下必须指定参数,可以通过设置required = false,来实现指定参数可选,这样请求不带@RequestParam指定的value参数也可以访问该方法。【小技巧2】可以设置defaultValue的值,这样就算请求的value参数不带值,就会被defaultValue设置一个默认值,也可以访问该方法。【小知识1】所有从页面传到后台的数据都是String类型,通过request.getParameter()获取的也是String数据类型,但是Spring会自动的进行String和八大基本数据类型转换。【小知识2】400错误(HTTP Status 400):是指错误的请求,url提供的参数和方法指定接收的参数不一致,数类型、个数不一致,参数name名称不一致等等

比如页面传入一个参数username = striveday,可以通过注解@RequestParam()来指定,实现方法参数名和页面传过来的请求参数名不一致也能赋值。

//通过@RequestParam让页面传入的参数username赋值给方法参数列表的name
@RequestMapping("testRequestParam")public String getUsername(@RequestParam("username") String name){System.out.println("username = " + name);}

 @RequestParam注解详解

1、作用:

@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)可以接受简单类型的属性,也可以接受对象类型。

2、语法:

语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
 
value:参数名
 
required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
 
defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值

3、业务处理Controller

@Controller
@RequestMapping("hello")
public class HelloController2 {/*** 接收普通请求参数* http://localhost:8080/hello/show16?name=linuxsir* url参数中的name必须要和@RequestParam("name")一致* @return*/@RequestMapping("show16")public ModelAndView test16(@RequestParam("name")String name){ModelAndView mv = new ModelAndView();mv.setViewName("hello2");mv.addObject("msg", "接收普通的请求参数:" + name);return mv;}/*** 接收普通请求参数* http://localhost:8080/hello/show17* url中没有name参数不会报错、有就显示出来* @return*/@RequestMapping("show17")public ModelAndView test17(@RequestParam(value="name",required=false)String name){ModelAndView mv = new ModelAndView();mv.setViewName("hello2");mv.addObject("msg", "接收普通请求参数:" + name);return mv;}/*** 接收普通请求参数* http://localhost:8080/hello/show18?name=998 显示为998* http://localhost:8080/hello/show18?name 显示为hello* @return*/@RequestMapping("show18")public ModelAndView test18(@RequestParam(value="name",required=true,defaultValue="hello")String name){ModelAndView mv = new ModelAndView();mv.setViewName("hello2");mv.addObject("msg", "接收普通请求参数:" + name);return mv;}
}

4、测试:

参考地址:@RequestParam注解使用_一叶知秋-CSDN博客_@requestparam

-------------------------------------------------------------------------------

2.8 配合使用@RequestBody设置请求参数

@RequestBody

该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,处理application/json的入参的

@RequestBody接收的参数是来自RequestBody中,即请求体中,就application/json类型的数据而言,使用注解@RequestBody可以将body里面所有的json数据传到后端,由后端用jackson或者fastjson来解析。

-----------------------------------------------------------------------------------

2.7和2.8小结: @RequestParam与@RequestBody使用对比 - 香吧香 - 博客园

1. @RequestBody和@RequestParam都是用来处理请求参数映射的,只是涉及场景不同
2. form-data、x-www-form-urlencoded:不可以用@RequestBody;
3. application/json:json字符串部分可以用@RequestBody;url中的?后面参数可以用@RequestParam
区别 @RequestParam @RequestBody
content-type 仅支持x-www-form-urlencoded json(常用), xml
请求类型 所有 除了GET(实测支持)
注解个数 可多个 只能有一个

多条件查询实现:

1、使用get请求用万能map或实体接收url中条件数据

2、使用post请求用实体接收条件数据

备注:Post请求可以同时在url中传递参数并接收body体!

--------------------------------------------------------------------------------------

2.9 配合使用@PathVariable,实现处理动态URL【***】

@RequestParam和@PathVariable区别:
    @RequestParam是一个用来处理请求URL地址到处理器controller功能方法映射规则的请求参数的值
    @PathVariable是请求 URI 中的模版变量部分到处理器功能处理方法的方法参数上的绑定,用来匹配URL路径的规则和模式。

举例1:@PathVariable("urlValue") String username

 //testPathVariable/{urlValue} 其中urlValue是占位符//以前的url是  /testPathVariable?urlvalue=值  现在变成了/testPathVariable/值@RequestMapping(value = "/testPathVariable/{urlValue}", method = RequestMethod.GET)public String getUrlValue (@PathVariable("urlValue") String username){System.out.println("urlValue = " + username);return username; }

上面这个方法访问localhost:8080/testPathVariable/参数值,不管参数值是什么,都会访问该方法,但是不同的参数值,都会赋值给方法的形式仓鼠username这个。比如你访问localhost:8080/testPathVariable/striveday和访问localhost:8080/testPathVariable/study都会访问该方法getUrlValue,但是他们的赋值给username不同,输出结果分为urlValue = striveday和urlValue = study

举例2:@PathVariable String ownerId

@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {  @RequestMapping("/pets/{petId}")  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {      // implementation omitted  }
}  

上面代码把URI template 中变量 ownerId的值和petId的值,绑定到方法的参数上。若方法参数名称和需要绑定的uri template中变量名称不一致,需要在@PathVariable("name")指定uri template中的名称。

-----------------------------------------------------------------------------------

3.0 @RequestHeader 注解

@RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上。

示例代码:

这是一个Request 的header部分:

Host                    localhost:8080
Accept                  text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language         fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding         gzip,deflate
Accept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive              300  
@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,  @RequestHeader("Keep-Alive") long keepAlive)  {  //...  }  

上面的代码,把request header部分的 Accept-Encoding的值,绑定到参数encoding上了, Keep-Alive header的值绑定到参数keepAlive上。取自优秀博客:Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解 - IT·达人 - 博客园

重点:@RequestMapping(含参数详解)和@RequestParam、@RequestBody、@PathVariable、@RequestHeader相关推荐

  1. 利用Pyecharts绘制漏斗图的案例【含参数详解】

    一.概念介绍 漏斗图(Funnel),也称为倒三角图,借助echarts的解释如下: Funnel diagram is suitable for one-way analysis of single ...

  2. 数据结构期末复习资料:重点总结+题库(含答案详解),助你一天复习数据结构,高分通过数据结构期末考试!不挂科!

    10小时不太可能了,但是100个小时完全OK的! 送你份独家突击复习资料,以下正文: 据说在期末考试前夕,同学们的学习能力会变强!但是数据结构,毕竟作为一门特别难的科目,如果平时没有学好,那么很可能就 ...

  3. JVM启动参数详解(含调优)

    java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容: 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足, ...

  4. SpringMVC接受JSON参数详解及常见错误总结我改

    SpringMVC接受JSON参数详解及常见错误总结 最近一段时间不想使用Session了,想感受一下Token这样比较安全,稳健的方式,顺便写一个统一的接口给浏览器还有APP.所以把一个练手项目的前 ...

  5. [转载] 【全面总结】Tensorflow 2.0+与Keras的联系与应用(含model详解)

    参考链接: Tensorflow 2.0的新功能 Tensorflow 2.0+与Keras的联系与应用(含model详解) 事实上我个人入坑tensorflow比较晚,于是导致我其实并没有经历Ten ...

  6. GPS北斗卫星主时钟(NTP网络时间服务器)技术参数详解

    GPS北斗卫星主时钟(NTP网络时间服务器)技术参数详解 GPS北斗卫星主时钟(NTP网络时间服务器)技术参数详解 主时钟(北斗二代卫星同步时钟,GPS北斗双模时钟服务器,GPS时间同步系统)是我司开 ...

  7. Python函数的参数详解

    Python函数的参数详解 函数是一个通用的程序结构组件.你也许已经在其他的编程语言中见到过,有时也被称为子程序或过程.简而言之,函数主要扮演了两个角色: 1)最大化代码重用和最小化代码冗余--函数允 ...

  8. Lesson 8.3Lesson 8.4 ID3、C4.5决策树的建模流程CART回归树的建模流程与sklearn参数详解

    Lesson 8.3 ID3.C4.5决策树的建模流程 ID3和C4.5作为的经典决策树算法,尽管无法通过sklearn来进行建模,但其基本原理仍然值得讨论与学习.接下来我们详细介绍关于ID3和C4. ...

  9. Lesson 8.1Lesson 8.2 决策树的核心思想与建模流程CART分类树的建模流程与sklearn评估器参数详解

    Lesson 8.1 决策树的核心思想与建模流程 从本节课开始,我们将介绍经典机器学习领域中最重要的一类有监督学习算法--树模型(决策树). 可此前的聚类算法类似,树模型也同样不是一个模型,而是一类模 ...

最新文章

  1. php常用20函数,PHP常用函数
  2. python主要用于什么-python主要用于哪些方向
  3. [YTU]_2442( C++习题 矩阵求和--重载运算符)
  4. sql like 多个值_用于数据分析的8个SQL技术
  5. Angularjs1.x 中的 service,factory,provider,constant,value
  6. CNN结构:StyleAI-图片风格分类效果已成(-FasterRCNN-FCN-MaskRCNN)
  7. DELPHI获取网卡MAC地址 转
  8. JavaFX之TableView
  9. 那些年,乘风破浪的科学家们
  10. java图形界面_学习Java有什么用?Java的应用领域有哪些?
  11. Error:java: Compilation failed: internal java compiler error 解决办法
  12. 一般性网络错误 请检查网络文档_“网络工程团队”公众号投稿须知!
  13. 全局鼠标手势linux,Firefox通过用户脚本和热键进行的全局鼠标手势(Win7 / Linux + FF 68 esr)...
  14. 参考文献名称怎么复制_论文格式之注释:脚注、尾注、参考文献怎么弄?
  15. 2.1.17 设置字符间距
  16. Sublime的tab键失效
  17. TensorFlow TFRecords简介
  18. Bootstrap系列之巨幕(Jumbotron)
  19. 怎么给二年级小学生讲鸡兔同笼问题
  20. 每周教育关注 | 新时代的教育评价改革

热门文章

  1. 阿加内存管理 初始化(八) 至kswapd_init
  2. 如何安全的Include文件
  3. 记录火狐浏览器的一些开发使用总结
  4. 小经验:sympy.abc最好指定导入,不要全部导入
  5. 使用Sonarqube扫描Javascript代码
  6. 大前端产品哀悼日变灰的整套方案
  7. 推荐一个技术圈子,Java技能提升就靠它了
  8. CreateFileMapping使用方法
  9. 软件定义网络SDN--概念的理解
  10. 尚硅谷 Spring5