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

时间: 2024-12-29 13:32:21

springMVC中 request请求数据绑定到Controller入参 过程剖析的相关文章

Java中request请求之 - 带文件上传的form表单

常用系统开发中总免不了显示图片,保存一些文件资料等操作. 这些操作的背后,就是程序员最熟悉的 enctype="multipart/form-data"类型的表单. 说起file类型的input,我们往往会遇到问题: 最为常见的就是编码格式-中文乱码.解决中文乱码最好的方式就是我们的项目全部使用 utf-8 格式的国际编码,因为它是可变字节长度的编码,对于占用2字节的中文绰绰有余了.另外就是使用 String s2 = new String(s1.getBytes(“ISO-8859-

javaWeb中request请求转发和response重定向

1.访问资源 运用forward方法只能重定向到同一个Web应用程序中的一个资源. 而sendRedirect方法可以让你重定向到任何URL. 2.request.get Forward代码中的"/uu"则代表相对与WEB应用的路径. 举例: Servlet 和 目标文件的包路径: Servlet  代码:中 doPost 和doGet代码: request 重定向url地址 或者是是相对于 本项目 (WEB13)  http:localhost:8080/WEB13+url     

关于jsp中request请求乱码问题

其实在写web项目的时候最怕的就是出现乱码,有时候很微小的错误可能要找很久,伤神费力.这就要求我们在编程的时候尽量要规范严谨.废话不多说,今天在写jsp的时候又出现了乱码.四处求解,在书上最后找到了答案.在提交表单的时候,如果是中文表单,难免要出现字符集不匹配出现的乱码,这时就要对这个进行编码设置.对于jsp中request这个内置对象,设置编码是这样的:<%requset.setCharactorEncoding("utf-8");%>,其实书上使用的是gb2312这个编

SpringMVC中的@requestMapping问题与controller方法的返回值问题

@requestMapping 1.url映射 定义controller方法对应的url,进行处理器映射使用 @RequestMapping("/items") public class ItemsController {...} 2.窄化请求映射 3.限制http请求方法 出于安全性考虑,对http的链接进行方法限制. 如果限制请求为post方法,进行get请求,报错: 但是因为method={}是数组,所以可以把POST与GET方法都写进去 controller方法的返回值 1.返

asp.net中Request请求参数的自动封装

这两天在测一个小Demo的时候发现一个很蛋疼的问题----请求参数的获取和封装,例: 方便测试用所以这里是一个很简单的表单. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> &

springMVC中ajax请求和日期转换(九)

一.代码示例(需要导入jquery文件和json的jar包) 1.前台页面 <html> <head> <script type="text/javascript" src="js/jquery-1.8.3.js"></script> <script> function check(x){ var uname= x.value; var url="findOneByUname?t="+n

.NET CORE API 使用Postman中Post请求获取不到传参问题

开发中遇到个坑 记录下. 使用Postman请求core api 接口时,按之前的使用方法(form-data , x-www-form-urlencoded)怎么设置都无法访问. 最后采用raw写入json数据,同时将Content-Type 设置为 application/json,终于请求成功. 后端代码(使用[FromBody]接收): // POST: api/Login [HttpPost] public ActionResult<string> Post([FromBody] A

SpringMVC 学习笔记(六) 数据绑定和JSR校验

① Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象 ② DataBinder 调用装配在 Spring MVC 上下文中的ConversionService 组件进行数据类型转换.数据格式化工作.将 Servlet 中的请求信息填充到入参对象中 ③ 调用 Validator 组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果Binding

学习SpringMVC(十六)之数据绑定流程

1.SpringMVC主框架将ServletRequest对象及目标方法的入参实例传递给WebDataBinderFactory实例,以创建DataBinder实例对象 2.DataBinder调用装配在SpringMVC上下文中的ConversionService组件进行数据类型转换.数据格式化工作.将Servlet中的请求信息填充到入参对象中 3.调用Validator组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果. 4.SpringMVC抽取BindingRe