springMVC中 request请求数据绑定到Controller入参 过程剖析
前言:
Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型。若这个普通Java类型没有声明任何注解,则意味着它的每一个属性都需要到Request中去查找对应的请求参数。众所周知,无论客户端传入的是什么类型的请求参数,最终都要以字节的形式传给服务端。而服务端通过Request的getParameter方法取到的参数也都是字符串形式的结果。所以,需要有一个把字符串形式的参数转换成服务端真正需要的类型的转换工具(基类:PropertyEditorSupport)
注:只有在请求头Content-Type为x-www-form-urlencoded类型时spring才能正常获取值,具体原因调试spring-web中WebUtils.getParametersStartingWith
请求头Content-Type类型参考文献:http://www.cnblogs.com/rgky/p/6081232.html 
1、request请求Controller的调用入口 InvocableHandlerMethod.invokeForRequest
①获取调用Controller所需的入参对象  ②调用Controller
2、获取Controller入参对象数组 InvocableHandlerMethod.getMethodArgumentValues
①获取Controller入参参数信息  ②遍历创建入参对象
3、创建入参对象 HandlerMethodArgumentResolverComposite.resolveArgument
①创建入参数据绑定处理类(如果Controller中存在@InitBinder注解的方法,会被执行)  ②创建入参对象、将request请求参数信息绑定到入参对象
 
4、将request请求参数信息绑定到入参对象 ServletRequestDataBinder.bind
①将request中的参数取出并封装  ②处理媒体文件上传数据封装
5、初始化入参对象具体的属性值  AbstractNestablePropertyAccessor.setPropertyValue
注:spring对Array、List、Map类型的属性做了处理,如Date日期类型就得自己添加编辑转换器,在Controller中用@InitBinder注解Method方式添加
6、@InitBinder 自定义入参对象属性值的编辑转换器
注:request中Parameter的值都是字符串,所以需要转换器处理(将字符串转换为所需的对象)
参考文献:
http://blog.csdn.net/axin66ok/article/details/17938095 
http://www.cnblogs.com/AloneSword/p/3998943.html
springMVC中 request请求数据绑定到Controller入参 过程剖析的更多相关文章
- @ModelAttribute 注解及 POJO入参过程
		
一.modelattribute注解 @ModelAttribute注解的方法有两种,一种无返回值,一种有返回值,方法的可以用@RequestParam注解来获取请求的参数,如果不获取参数,可以不用此 ...
 - springmvc中request的线程安全问题
		
SpringMvc学习心得(四)springmvc中request的线程安全问题 标签: springspring mvc框架线程安全 2016-03-19 11:25 611人阅读 评论(1) 收藏 ...
 - SpringMVC中post请求参数注解@requestBody使用问题
		
一.httpClient发送Post 原文https://www.cnblogs.com/Vdiao/p/5339487.html public static String httpPostWithJ ...
 - springMVC中接收请求参数&&数据转发
		
### 1. 接收请求参数 #### 1.1. [不推荐] 通过HttpServletRequest获取请求参数 假设存在: <form action="handle_login.do ...
 - Java中request请求之 - 带文件上传的form表单
		
常用系统开发中总免不了显示图片,保存一些文件资料等操作. 这些操作的背后,就是程序员最熟悉的 enctype="multipart/form-data"类型的表单. 说起file类 ...
 - 详解SpringMVC中GET请求
		
GET请求概述 GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接.URL的编码格式采用的是ASCII编码,而不是uniclde,所有的非ASCII字符都要编 ...
 - javaWeb中request请求转发和response重定向
		
1.访问资源 运用forward方法只能重定向到同一个Web应用程序中的一个资源. 而sendRedirect方法可以让你重定向到任何URL. 2.request.get Forward代码中的&q ...
 - (一)将mockjs集成到VUE中后,怎样根据接口入参返回mock结果
		
1)安装mockjs,这一步跳过 2)在项目中建立mock模块,笔者的目录结构如下 mock模块与接口模块一一对应,有一个接口,就有一个mock 3)编写登陆模块mock接口,代码如下: import ...
 - 【SpringMVC】SpringMVC系列8之Servlet API 作为入参
		
8.Servlet API 作为入参 8.1.概述 MVC 的 Handler 方法可以接受哪些 ServletAPI 类型的参数: HttpServletRequest HttpServletRes ...
 
随机推荐
- ubuntu安全卸载移动硬盘(safely remove)
			
移动磁盘不能安全卸载.在网上找到的资料如下: sudo apt-get install udisks sudo umount /dev/sdb1 sudo udisksctl power-off -b ...
 - Java开发环境搭建——Tomcat配置
			
指定tomcat的JDK版本可能由于种种原因,系统的JAVA_HOME配置的JDK版本并不是当前需要的版本,而tomcat默认使用的是JAVA_HOME的JDK.可以通过修改tomcat/bin/ca ...
 - codevs 2287 火车站
			
2287 火车站 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description 火车从始发站(称为第1站)开出,在始发站上车的人 ...
 - php+swoole+websocket
			
//创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = new swoole_websocket_server("0.0.0.0", 9502); // ...
 - Apriori算法的原理与python 实现。
			
前言:这是一个老故事, 但每次看总是能从中想到点什么.在一家超市里,有一个有趣的现象:尿布和啤酒赫然摆在一起出售.但是这个奇怪的举措却使尿布和啤酒的销量双双增加了.这不是一个笑话,而是发生在美国沃尔玛 ...
 - Docker命令详解
			
Docker命令详解 最近学习Docker,将docker所有命令实验了一番,特整理如下: # docker --help Usage: docker [OPTIONS] COMMAND [arg ...
 - ionic  发布  inoc显示不正确
			
前两天因为学习的问题,把本地环境给搞崩了,然后重新安装环境之后发现生成的安装包不能使用,然后找了很多原因都不能解决,因为之前发布ios的时候使用命令 ionic resources的时候就可以将图标显 ...
 - vs2015 生成项目时,提示执行失败,参数错误
			
今天vs2015 生成项目时,提示执行失败,参数错误.查了很多资料未解决 后来,发现只有一个项目出现这个问题,其他项目生成正常.怀疑是该项目解决方案的问题 于是将解决项目中的项目移除,逐一生成引用,解 ...
 - jQuery 人脸识别插件,支持图片和视频
			
jQuery Face Detection 是一款人脸检测插件,能够检测到图片,视频和画布中的人脸坐标.它跟踪人脸并输出人脸模型的坐标位置为一个数组.我们相信,面部识别技术能够给我们的 Web 应用带 ...
 - CH模拟赛 还教室
			
/* 区间操作,可以推一推式子,方差为平方的平均数-平均数的平方,维护区间和与区间平方和,平方和的维护方法类似,式子推一推就行了,注意约分 */ #include<iostream> #i ...