以请求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。

四、参考:

  1. springboot 获取 URL 请求参数的几种方法 - 记忆碎片 - CSDN 博客

    注:形参+ HttpServletRequest + @PathVariable + @RequestParam + @ModelAttribute
  2. @RequestParam 和 @PathVariable 的区别及其应用场景 - 挑战者 V - 博客园

    注:场景分析很不错。
  3. Spring MVC 怎么获取 request 的请求参数 - yh_zeng2 的博客 - CSDN 博客

    注:有一个通过 RequestContextHolder 上下文获取 request 对象的说明,后续了解下。
  4. @PathVariable 和 @RequestParam 的区别 - 每天进步一点点! - ITeye 博客

    注:整体说明很好,结构和本文差不多,所以来由很清楚。同时还有 @RequestHeader, @CookieValue ,@SessionAttributes, @ModelAttribute 等注解的说明。
  5. springMVC 接收参数的几种形式 - alwaysBrother 的博客 - CSDN 博客

    注:很全的说明,对于入参的类型做了特别说明。还有使用Map接收参数的方式。多参考。

Spring MVC如何获取请求中的参数的更多相关文章

  1. Spring MVC无法获取ajax POST的参数和值

    一.怎么会这个样子 很简单的一个想法,ajax以POST的方式提交一个表单,Spring MVC解析.然而一次次的打印null折磨了我整整一天…… 最后的解决现在看来是很明显的问题,“只是当时已惘然” ...

  2. SpringMVC无法获取请求中的参数的问题的调查与解决(1)

    *更新:本文第一版中犯了比较大的错误,无论@RequestBody还是@RequestParam注解一样,都会使用全局的Encoding进行解码,会导致特殊编码的参数值丢失. 只要抛弃掉注解,就完全可 ...

  3. SpringMVC无法获取请求中的参数的问题的调查与解决(2)

    由于Request的getInputSteam()一旦获取一次后,就再也无法获取了 在实际项目中导致下面的问题: 1,多个拦截器,Filter都需要从InputStream中拿数据的情况无法处理: 2 ...

  4. 为何Spring MVC可获取到方法参数名,而MyBatis却不行?【享学Spring MVC】

    每篇一句 胡适:多谈些问题,少聊些主义 前言 Spring MVC和MyBatis作为当下最为流行的两个框架,大家平时开发中都在用.如果你往深了一步去思考,你应该会有这样的疑问: 在使用Spring ...

  5. springboot的restful风格获取请求中携带的参数

    http://localhost:8080/emp/1 有以上请求,我们controller要怎么获取请求中传递的参数1呢? 通过PathVariable注解,如下: @DeleteMapping(& ...

  6. 获取url中的参数\+发送ajax请求根路径|+获取复选框的值

    //获取url中的参数function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=( ...

  7. Spring MVC的映射请求

    一.SpringMVC常用注解 @Controller 声明Action组件 @Service    声明Service组件    @Service("myMovieLister" ...

  8. Spring MVC 处理一个请求的流程分析

    Spring MVC是Spring系列框架中使用频率最高的部分.不管是Spring Boot还是传统的Spring项目,只要是Web项目都会使用到Spring MVC部分.因此程序员一定要熟练掌握MV ...

  9. spring mvc 文件下载 get请求解决中文乱码问题

    方案简写,自己或有些基础的可以看懂,因为没时间写的那么详细 方案1 spring mvc解决get请求中文乱码问题, 在tamcat中server.xml文件 URIEncoding="UT ...

随机推荐

  1. 深入基础(四)Buffer,转码

    Buffer     前面提及到一些关于buffer类的问题,当时不是很明确 那么就次机会顺便深入探讨一下这个东西到底干嘛的出现在什么时候,如何使用.昨天跟朋友聊天他说我每一篇博文内容太长太长了 虽然 ...

  2. firefox设置

    如果长期使用linux(我常使用的是fedora)的朋友,就会知道,默认情况下,只要是这台linux再内网,开机几个小时后就无法再访问 google 和webqq 这些网站了并且打开一些网站也是要话上 ...

  3. php-fpm nginx 超时参数设置

    php-fpm:request_terminate_timeout = 30php.ini:max_execution_time = 30 request_terminate_timeout 适用于, ...

  4. Java 中HashTable、HashMap、TreeMap三者区别,以及自定义对象是否相同比较,自定义排序等

    /* Map集合:该集合存储键值对.一对一对往里存.而且要保证键的唯一性. Map |--Hashtable:底层是哈希表数据结构,不可以存入null键null值.该集合是线程同步的.效率低.基本已废 ...

  5. python 嵌套字典取值增强版

    def getdictvalue(d,code): result=[] if isinstance(d, dict) : try: value = d[code] result.append(valu ...

  6. 设计模式-Iterator

    本文参(chao)考(xi)<图解设计模式> 结城浩 (作者) 杨文轩 (译者) 1.Iterator 模式 迭代器作用于集合,是用来遍历集合元素的对象. 迭代器模式提供一种方法顺序访问一 ...

  7. ubuntu之路——day11.4 定位数据不匹配与人工合成数据

    1.人工检验train和dev/test之间的区别: 比如:汽车语音识别中的噪音.地名难以识别等等 2.使得你的训练集更靠近(相似于)dev/test,收集更多类似于dev的数据: 比如:dev中存在 ...

  8. SelectKBest

    https://www.e-learn.cn/content/python/2198918from sklearn.feature_selection import SelectKBest,f_cla ...

  9. Linux服务器下日志截取

    我们经常需要去Linux服务器上查看服务运行日志,但是有时候日志文件很大看起来很不方便,这个时候我们需要对日志进行切割筛选出自己需要的日志,比如查看某段时间内的日志,命令如下:   sed -n '/ ...

  10. Javascript自定义事件功能与用法实例分析

    原文地址:https://www.jb51.net/article/127776.htm 本文实例讲述了javascript自定义事件功能与用法.分享给大家供大家参考,具体如下: 概述 自定义事件很难 ...