Spring MVC如何获取请求中的参数
以请求http://localhost/test/charge2/hfcz/fuLu?a=1&b=2为例。
请求分为两部分,以?为分割。前面是URL,后面是GET请求的请求参数。
注意:一般GET请求才会把参数通过
?形式附在URL后面,POST请求的参数一般在Body部分。
这些关系可以参考: url 中 & 、 ? 、 # 的作用 - xiongzhengxiang 的专栏 - CSDN 博客
一、获取URL中路径参数
1.1 @PathVariable 注解
@GetMapping(value="charge2/{business}/{agent}",produces="application/json;charset=utf-8")
public Object getUserById(@PathVariable("business") String business,@PathVariable("agent") String agent) {
}
如上Demo。结合请求,使用该注解后,在方法中,business=hfcz,agent=fuLu。
主要应用场景是:不少应用为了实现 RestFul 的风格,采用 @PathVariable 这种方式。
1.2 @PathParam 注解
这个注解是和 spring 的 pathVariable 是一样的,也是基于模板的,但是这个是 jboss 包下面的一个实现,上面的是 spring 的一个实现,都要导包 。
具体参考: @RequestParam,@PathParam,@PathVariable 等注解区别 - 一年 e 度的夏天的专栏 - CSDN 博客
二、获取请求参数:
2.1 GET请求
2.1.1 获取请求中的单个参数:@RequestParam 注解和方法入参
@GetMapping(value="charge2/hfcz/fuLu",produces="application/json;charset=utf-8")
public Object getUserById(@RequestParam(value = "a") String a, String b) {
}
如上:最终方法中a=1,b=2。不管是否使用 @RequestParam 注解,只要方法中的变量名和请求中参数key一致,就会自动映射。
2.2.2 获取请求中的所有参数和单个参数
@GetMapping(value="charge2/hfcz/fuLu",produces="application/json;charset=utf-8")
public Object getUserById(HttpServletRequest httpServletRequest) {
//获取所有参数
Map<String, Object> map = httpServletRequest.getParameterMap();
//获取单个参数:该方法同时适用于 get 方式中 queryString 的值,和 post 方式中 body data 的值;
String a=request.getParameter("a");
}
如上:map中会有两个键值对,分别为a=1,b=2。然后字符串a就是1。
2.2 POST请求
2.2.1 注解: @RequestBody
该注解适合JSON形式的请求。参数可以自动被映射为一个对应的Bean或者一个Map。
三、各种方式对请求的要求:
下面内容参考: springMVC 接收参数的几种形式 - alwaysBrother 的博客 - CSDN 博客
3.1 Controller 的方法的形参
- 适用于 get:
- 适用于 post :编码方式需设置为:x-www-form-urlencoded 转换为键值对形式。
3.2 通过 HttpServletRequest 接收
- 适用于 get:
- 适用于 post :不能接收 json。post 方式时编码方式需设置为:x-www-form-urlencoded 转换为键值对。
3.3 通过一个 bean
- 适用于 get:
- 适用于 post :不想让参数拼接在 url 后面的话,可将参数放在 body 中。编码方式需设置为:x-www-form-urlencoded
3.4 接收JSON
只适用于post应该:使用@RequestBody 注解,可以通过Bean和Map接收。
3.5 通过注解 @RequestParam
- 适用于 get:
- 适用于 post :编码方式需设置为:x-www-form-urlencoded, 不能接受 json。
四、参考:
- springboot 获取 URL 请求参数的几种方法 - 记忆碎片 - CSDN 博客
注:形参+ HttpServletRequest + @PathVariable + @RequestParam + @ModelAttribute- @RequestParam 和 @PathVariable 的区别及其应用场景 - 挑战者 V - 博客园
注:场景分析很不错。- Spring MVC 怎么获取 request 的请求参数 - yh_zeng2 的博客 - CSDN 博客
注:有一个通过 RequestContextHolder 上下文获取 request 对象的说明,后续了解下。- @PathVariable 和 @RequestParam 的区别 - 每天进步一点点! - ITeye 博客
注:整体说明很好,结构和本文差不多,所以来由很清楚。同时还有 @RequestHeader, @CookieValue ,@SessionAttributes, @ModelAttribute 等注解的说明。- springMVC 接收参数的几种形式 - alwaysBrother 的博客 - CSDN 博客
注:很全的说明,对于入参的类型做了特别说明。还有使用Map接收参数的方式。多参考。
Spring MVC如何获取请求中的参数的更多相关文章
- Spring MVC无法获取ajax POST的参数和值
一.怎么会这个样子 很简单的一个想法,ajax以POST的方式提交一个表单,Spring MVC解析.然而一次次的打印null折磨了我整整一天…… 最后的解决现在看来是很明显的问题,“只是当时已惘然” ...
- SpringMVC无法获取请求中的参数的问题的调查与解决(1)
*更新:本文第一版中犯了比较大的错误,无论@RequestBody还是@RequestParam注解一样,都会使用全局的Encoding进行解码,会导致特殊编码的参数值丢失. 只要抛弃掉注解,就完全可 ...
- SpringMVC无法获取请求中的参数的问题的调查与解决(2)
由于Request的getInputSteam()一旦获取一次后,就再也无法获取了 在实际项目中导致下面的问题: 1,多个拦截器,Filter都需要从InputStream中拿数据的情况无法处理: 2 ...
- 为何Spring MVC可获取到方法参数名,而MyBatis却不行?【享学Spring MVC】
每篇一句 胡适:多谈些问题,少聊些主义 前言 Spring MVC和MyBatis作为当下最为流行的两个框架,大家平时开发中都在用.如果你往深了一步去思考,你应该会有这样的疑问: 在使用Spring ...
- springboot的restful风格获取请求中携带的参数
http://localhost:8080/emp/1 有以上请求,我们controller要怎么获取请求中传递的参数1呢? 通过PathVariable注解,如下: @DeleteMapping(& ...
- 获取url中的参数\+发送ajax请求根路径|+获取复选框的值
//获取url中的参数function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=( ...
- Spring MVC的映射请求
一.SpringMVC常用注解 @Controller 声明Action组件 @Service 声明Service组件 @Service("myMovieLister" ...
- Spring MVC 处理一个请求的流程分析
Spring MVC是Spring系列框架中使用频率最高的部分.不管是Spring Boot还是传统的Spring项目,只要是Web项目都会使用到Spring MVC部分.因此程序员一定要熟练掌握MV ...
- spring mvc 文件下载 get请求解决中文乱码问题
方案简写,自己或有些基础的可以看懂,因为没时间写的那么详细 方案1 spring mvc解决get请求中文乱码问题, 在tamcat中server.xml文件 URIEncoding="UT ...
随机推荐
- mysql 5.7.21, for Linux (i686) 权限配置
配置权限参数: GRANT语法: GRANT 权限 ON 数据库.* TO 用户名@'登录主机' IDENTIFIED BY '密码' 权限: ALL,ALTER,CREATE,DROP,SELECT ...
- shell脚本之 operater.sh 算术运算符;比较运算符;布尔运算符;逻辑与或非运算符;字符串运算符的使用
1.注意 格式不能变 尤其是变量和变量表达式之间的空格:[ 空格] .[ $a == $b ] 中间的空格严格不能变:否则报错 关系运算符 关系运算符只支持数字,不支持字符串,除非字符串的值是数字. ...
- PageHelper的问题
如果分页语句没有被消耗掉,它一直保留着,直到被织入到下一次查询语句,如果 被织入的查询语句自己有LIMIT限制,那么两个LIMIT就导致语法错误了. PageHelper.startPage(page ...
- Java 基础:继承中的执行顺序
1.单独的父类测试 Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分, 它们的执行顺序相对来说比较简单,用程序也很容易验证. 比如新建一个 ...
- 高效率编辑器 Vim——操作篇,非常适合 Vim 新手
原文地址:https://linuxtoy.org/archives/efficient-editing-with-vim.html vim教程:http://vimcasts.org/ https: ...
- zabbix监控线
echo mntr | nc 127.0.0.1 2181获取mntr的信息 换成conf将获得conf信息,从中找出需要监控项 conf: clientPort:客户端端口号 dataDir:数据文 ...
- 2019-暑假作业-Java语言程序设计
本文于2017年创建,最后更新2019-07-16 任务列表 1.学会使用Markdown做笔记 本篇随笔就是使用的Markdown语法.养成做笔记的习惯! 参考资料: 极简MarkDown排版介绍( ...
- python判断字符串包含关系
转自---http://blog.csdn.net/yl2isoft/article/details/52079960 1.使用成员操作符 in >>> s='nihao,shiji ...
- strace命令 一
简介 strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核 ...
- yii2 下的redis常用命令集合
<?php \Yii::$app->redis->set('user','aaa'); \Yii::$app->redis->set('user2','bbb'); \Y ...