转载自  Spring MVC竟然有5种参数绑定的方式?你知道几种?

SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了

下面通过5个常用的注解演示下如何进行参数绑定:

1. @PathVariable注解

@PathVariable 是用来获得请求url中的动态参数的,可以将URL中的变量映射到功能处理方法的参数上,其中URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。

示例代码:

 @ResponseBody@RequestMapping("/testUrlPathParam/{param1}/{param2}")public void testUrlPathParam(HttpServletRequest request, @PathVariable String param1,
@PathVariable String param2) {System.out.println("通过PathVariable获取的参数param1=" + param1);System.out.println("通过PathVariable获取的参数param2=" + param2);}

Postman发送请求截图:

发送请求截图

输出结果:

通过PathVariable获取的参数param1=1通过PathVariable获取的参数param2=2

2.@RequestHeader注解

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

示例代码:

 @ResponseBody@RequestMapping("/testHeaderParam")public void testHeaderParam(HttpServletRequest request, @RequestHeader String param1) {System.out.println("通过RequestHeader获取的参数param1=" + param1);}

Postman发送请求截图:

发送请求截图

输出结果:

通过RequestHeader获取的参数param1=abc

3.@CookieValue注解

@CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上。

示例代码:

 @ResponseBody@RequestMapping("/testCookieParam")public void testCookieParam(HttpServletRequest request, HttpServletResponse response,
@CookieValue String sessionid) {System.out.println("通过CookieValue获取的参数sessionid=" + sessionid);}

Postman发送请求截图:

发送请求截图

输出结果:

通过CookieValue获取的参数sessionid=ebef978eef6c46f8a95cc0990d2d360a

4.@RequestParam注解

@RequestParam注解用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。提交方式为get或post。(Http协议中,form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded);

@RequestParam注解实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段,

get方式中queryString的值,和post方式中body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到;

该注解有三个属性: value、required、defaultValue; value用来指定要传入值的id名称,required用来指示参数是否必录,defaultValue表示参数不传时候的默认值。

示例代码:

 @ResponseBody@RequestMapping("/testRequestParam")public void testRequestParam(HttpServletRequest request,@RequestParam(value = "num", required = true, defaultValue = "0") int num) {System.out.println("通过RequestParam获取的参数num=" + num);}

Postman发送请求截图:

输出结果:

通过RequestParam获取的参数num=10

5.@RequestBody注解

@RequestBody注解用来处理HttpEntity(请求体)传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据;

GET请求中,因为没有HttpEntity,所以@RequestBody并不适用;

POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

示例代码:

 @ResponseBody@RequestMapping("/testRequestBody")public void testRequestBody(HttpServletRequest request, @RequestBody String bodyStr){System.out.println("通过RequestBody获取的参数bodyStr=" + bodyStr);}

Postman发送请求截图:

发送请求截图

代码运行结果:

通过RequestBody获取的参数bodyStr=这是body的内容

作者:Java碎碎念

Spring MVC竟然有5种参数绑定的方式?你知道几种?相关推荐

  1. Spring Mvc Controller返回值、参数绑定、参数校验 (高级二)

    1,Controller 返回值 返回moduleAndView 返回 String 返回void 2,Controller 参数绑定 客户端请求携带的key/value 键值对 绑定到 Contro ...

  2. JavaScript三种事件绑定的方式(DOM的0级、2级、3级事件处理程序)

    JS事件绑定的方式: ①.行内绑定 ②.动态绑定 ③.事件监听 一.行内绑定[DOM0级事件处理程序]: 例:<标签 属性列表 事件="事件的处理程序" /> 虽然可以 ...

  3. spring mvc绑定对象String转Date解决入参不能是Date的问题

    使用spring的mvc,直接将页面参数绑定到对象中,对象中有属性为Date时会报错,此时需要处理下. 同样的,其他的需要处理的类型也可以用这种方法. 在controller中加入代码 @InitBi ...

  4. Spring MVC(三)--控制器接受普通请求参数

    Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数 ...

  5. springboot实现增量备份_增量同步-spring batch(6)动态参数绑定与增量同步

    tags:springbatch 1.引言 上一篇<便捷的数据读写-spring batch(5)结合beetlSql进行数据读写>中使用Spring Batch及BeetlSql,对数据 ...

  6. Spring MVC 实战:三种方式获取登录用户信息

    前言 Web 项目中,维持用户登录状态的常用方式有三种,分别是 Cookie.Session.Token,不管哪种方案,都需要获取到用户信息供业务层使用. 由于获取用户信息与具体业务无关,因此在普通的 ...

  7. Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解

    Spring MVC 学习总结(二)--控制器定义与@RequestMapping详解 目录 一.控制器定义 1.1.实现接口Controller定义控制器 1.2.使用注解@Controller定义 ...

  8. Spring MVC源码解析

    Spring Mvc结构解析 上图是Dispatcher Servlet的结构图,从图中可以清楚的看到Dispatcher Servlet的继承链,下面我们将基于Spring4.1.6揭开Spring ...

  9. springmvc(三) 参数绑定、

    前面两章就介绍了什么是springmvc,springmvc的框架原理,并且会简单的使用springmvc以及ssm的整合,从这一章节来看,就开始讲解springmvc的各种功能实现,慢慢消化 --W ...

最新文章

  1. vuex刷新页面数据丢失怎么解决_vuex状态机浅谈
  2. 利用max-height适应多尺寸屏幕的下拉动画
  3. [moka同学笔记]PHP操作Redis收集
  4. 使用Installshield制作asp,asp.net应用的安装程序
  5. 深度学总结:RNN训练需要注意地方:pytorch每一个batch训练之前需要把hidden = hidden.data,否者反向传播的梯度会遍历以前的timestep
  6. 从网络字节流中提出整数
  7. 怎么让模糊的数字变清楚_一键模糊图像变清晰,好家伙!这款神器插件你值得拥有...
  8. 针对笔记本电源已接通未充电的提示怎么办
  9. std::setw的坑
  10. PD3.0协议开发经验
  11. 2018-8-10-win10-uwp-win2d-离屏渲染
  12. linux qt 找不到 lgl,c ++ - Qt:找不到-lGL
  13. 华为荣耀20s云服务_华为荣耀20s云服务_华为荣耀20和20s的区别
  14. 全国一半人跑长沙,长沙一半人跑哪?
  15. 2019年小白学习web前端路线图及学习攻略
  16. 台式计算机硬盘的安装位置,台式主机扩大存储,7步教你完美安装机械硬盘
  17. 互联网思维:毛利率变零下的硬件厂家将横尸遍野,华为这样的硬件公司何去何从
  18. 今日收获 可以点击的标签 鼠标悬浮 小手图标
  19. python爬虫——基础知识
  20. 简历中使用STAR法则

热门文章

  1. 用户登录查全表好还是用用户名好_外贸人/货代人不要为海运难过了:请看如何查运价和调配舱位解决缺箱!...
  2. 问题 B: 数塔问题
  3. 晶振噪声及杂散_晶振如何匹配电容看了就知道
  4. python定义一个_Python,包括定义一个类
  5. [SpringSecurity]基本原理_过滤器加载过程
  6. [信息学奥赛一本通-T1620]质因数分解-数论
  7. 数据结构与算法--求1~n能组成的所有二叉搜索树的排列
  8. java程序员选择多个offer时需要看重哪些?_对不起,我们公司不要本科以下的大学生,学历对于程序员重不重要...
  9. Codeforces Round #741 (Div. 2) D2. Two Hundred Twenty One (hard version) 前缀和 + 分段模型
  10. CF1354F. Summoning Minions