spring mvc 数据绑定
1、spring mvc 默认提供的数据绑定类
private List<HandlerMethodArgumentResolver> getDefaultArgumentResolvers() {
List<HandlerMethodArgumentResolver> resolvers = new ArrayList<HandlerMethodArgumentResolver>();
// Annotation-based argument resolution
resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(), false));
resolvers.add(new RequestParamMapMethodArgumentResolver());
resolvers.add(new PathVariableMethodArgumentResolver());
resolvers.add(new PathVariableMapMethodArgumentResolver());
resolvers.add(new MatrixVariableMethodArgumentResolver());
resolvers.add(new MatrixVariableMapMethodArgumentResolver());
resolvers.add(new ServletModelAttributeMethodProcessor(false));
resolvers.add(new RequestResponseBodyMethodProcessor(getMessageConverters()));
resolvers.add(new RequestPartMethodArgumentResolver(getMessageConverters()));
resolvers.add(new RequestHeaderMethodArgumentResolver(getBeanFactory()));
resolvers.add(new RequestHeaderMapMethodArgumentResolver());
resolvers.add(new ServletCookieValueMethodArgumentResolver(getBeanFactory()));
resolvers.add(new ExpressionValueMethodArgumentResolver(getBeanFactory()));
// Type-based argument resolution
resolvers.add(new ServletRequestMethodArgumentResolver());
resolvers.add(new ServletResponseMethodArgumentResolver());
resolvers.add(new HttpEntityMethodProcessor(getMessageConverters()));
resolvers.add(new RedirectAttributesMethodArgumentResolver());
resolvers.add(new ModelMethodProcessor());
resolvers.add(new MapMethodProcessor());
resolvers.add(new ErrorsMethodArgumentResolver());
resolvers.add(new SessionStatusMethodArgumentResolver());
resolvers.add(new UriComponentsBuilderMethodArgumentResolver());
// Custom arguments
if (getCustomArgumentResolvers() != null) {
resolvers.addAll(getCustomArgumentResolvers());
}
// Catch-all
resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(), true));
resolvers.add(new ServletModelAttributeMethodProcessor(true));
return resolvers;
}
2、其中解析自定义class的为 ServletModelAttributeMethodProcessor
所有参数对应解析类如下:
RequestParamMethodArgumentResolver
处理类型:
1、包含注解RequestParam,但不处理参数类型为Map,且不包含value值
2、参数类型为MultipartFile,或javax.servlet.http.Part的类型
处理方式:
1、如果参数类型为MultipartFile,返回MultipartFile
2、如果参数类型为List<MultipartFile>,返回List<MultipartFile>
3、如果参数类型为javax.servlet.http.Part,返回Part
4、否则返回request.getParameter("key")
RequestParamMapMethodArgumentResolver
处理类型:
1、参数包含RequestParam注解,且注解的value值为空,且参数类型为Map
处理方式:
1、把parameter以map形式保存,如果value有多个值,只取第一个
PathVariableMethodArgumentResolver
处理类型:
1、包含注解PathVariable,如果参数类型为Map,且PathVariable的value为空不处理
处理方式:
1、根据把RequestMapping的url表达式,找到对应的值
2、把对应的值转换为参数类型对象
3、以View.class.getName() + ".pathVariables" 为key,参数值为value,放入request 的Attribute中
PathVariableMapMethodArgumentResolver
处理类型:
1、包含注解PathVariable,且参数类型为Map,且PathVariable的value为空
处理方式:
1、返回Map形式的对象
MatrixVariableMethodArgumentResolver
处理类型:
1、包含注解MatrixVariable,如果参数类型为Map,且MatrixVariable的value为空不处理
处理方式:
1、把对应的值反射到参数中
例子
// GET /owners/42;q=11/pets/21;q=22
@RequestMapping(value = "/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET)
public void findPet(
@MatrixVariable(value="q", pathVar="ownerId") int q1,
@MatrixVariable(value="q", pathVar="petId") int q2) {
// q1 == 11
// q2 == 22
}
MatrixVariableMapMethodArgumentResolver
处理类型:
1、包含注解MatrixVariable,且参数类型为Map,且MatrixVariable的value为空
处理方式:
2、生产Map
ServletModelAttributeMethodProcessor
处理类型:
1、参数包含注解ModelAttribute
处理方式:
1、获取name,默认为value,如果没有则使用参数名
2、如果model包含了name的对象,这返回,如果没有则创建对象,然后把request.getParameter的值反射到对象中
3、将对象放入model中
RequestResponseBodyMethodProcessor
处理类型:
1、参数包含注解RequestBody
处理方式:
1、将post数据转换成对应的对象
RequestPartMethodArgumentResolver
处理类型:
1、包含注解RequestPart
2、类型为MultipartFile,但是没有注解RequestParam
3、类型为javax.servlet.http.Part
处理方式:
1、返回对象的类型数据
RequestHeaderMethodArgumentResolver
处理类型:
1、包含注解RequestHeader,且类型不是Map
处理方式:
1、返回request.getHeaderValues(name)[0]
RequestHeaderMapMethodArgumentResolver
处理类型:
1、包含注解RequestHeader,且类型是Map
处理方式:
1、把Heander转换成Map
ServletCookieValueMethodArgumentResolver
处理类型:
1、包含注解CookieValue
处理方式:
1、找到对应的cookie,如果参数类型为Cookie则返回cookie,如果是String,返回cookie的值
ExpressionValueMethodArgumentResolver
处理类型:
1、包含注解Value
处理方式:
ServletRequestMethodArgumentResolver
处理类型:
处理方式:
ServletResponseMethodArgumentResolver
处理类型:
1、处理类型为WebRequest.class.isAssignableFrom(paramType) ||
ServletRequest.class.isAssignableFrom(paramType) ||
MultipartRequest.class.isAssignableFrom(paramType) ||
HttpSession.class.isAssignableFrom(paramType) ||
Principal.class.isAssignableFrom(paramType) ||
Locale.class.equals(paramType) ||
InputStream.class.isAssignableFrom(paramType) ||
Reader.class.isAssignableFrom(paramType);
处理方式:
1、返回对应类型
RedirectAttributesMethodArgumentResolver
处理类型:
1、参数类型为RedirectAttributes
处理方式:
ModelMethodProcessor
处理类型:
1、处理类型为Model
处理方式:
1、返回Model
MapMethodProcessor
处理类型:
1、处理类型为Map
处理方式:
1、返回Model
ErrorsMethodArgumentResolver
处理类型:
1、处理类型为Errors
处理方式:
1、如果model没有数据,抛出IllegalStateException异常,否则返回BindingResult
SessionStatusMethodArgumentResolver
处理类型:
1、类型为SessionStatus
处理方式:
1、return mavContainer.getSessionStatus();
UriComponentsBuilderMethodArgumentResolver
处理类型:
1、类型为UriComponentsBuilder
处理方式:
1、返回UriComponentsBuilder
spring mvc 数据绑定的更多相关文章
- Spring MVC—数据绑定机制,数据转换,数据格式化配置,数据校验
Spring MVC数据绑定机制 数据转换 Spring MVC处理JSON 数据格式化配置使用 数据校验 数据校验 Spring MVC数据绑定机制 Spring MVC解析JSON格式的数据: 步 ...
- Spring MVC 数据绑定流程分析
1. 数据绑定流程原理★ ① Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 Data ...
- Spring MVC数据绑定(一)
1.数据绑定介绍 在执行程序时,Spring MVC会根据客户端请求参数的不同,将请求消息中的信息以一定的方式转换并绑定到控制器类的方法参数中.这种将请求消息数据与后台方法参数建立连接的过程就是Spr ...
- spring mvc 数据绑定总结
spring mvc 做web开发时,经常会不知道如何合适绑定页面数据.用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便(本人最开始也是这么认为),经过一段时间的应用 ...
- Spring MVC数据绑定大全 .
刚开始用spring mvc 做web开发时,经常会不知道如何合适绑定页面数据.用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便(本人最开始也是这么认为),经过一段时 ...
- Spring MVC 数据绑定 (四)
完整的项目案例: springmvc.zip 目录 实例 项目结构路径: 一.配置web.xml <?xml version="1.0" encoding="UTF ...
- Spring MVC数据绑定(二)
之前学习了SpringMVC数据绑定的基本知识和简单数据绑定以及POJO类型数据的绑定.接下来总结剩下的一些数据类型的绑定 1. 绑定包装POJO 所谓的包装POJO,就是在一个POJO中包含另一个简 ...
- Spring MVC 数据绑定(四)
Spring支持多种形式的类型绑定,包括: 1.基本数据类型.String和String[] 2.简单对象类型 3.List类型 4.Set类型 5.Map类型 6.复合数据类型 接下 ...
- Spring MVC数据绑定入门总结
1.基本类型 基本类型参数不可为空 正例:http://localhost:8080/demo/he?id=2 反例:http://localhost:8080/demo/he?id=(报400错误) ...
随机推荐
- 【笨嘴拙舌WINDOWS】窗体样式
"眼睛是人类心灵的窗口,打开窗口,你就能看到整个世界" 在PC时代,计算机的显示屏就是真个世界,WINDOWS将真个世界分解为一个个的窗口,每个窗口有自己的容貌,下面我们将一一揭开 ...
- Jqgrid入门-Jqgrid格式化数据(九)
上一章已经说明了在Jqgrid中如何对数据分组,这一章主要探讨如何格式化Jqgrid中的数据.何谓格式化呢?举个例子,比如对时间格式化处理,去掉后面的时分秒:对数字进行处理,加上千分位分隔符,小数的保 ...
- OE中admin的内置帐号
在OE中admin的内置帐号为SUPERUSER_ID,可以用来直接做判断登录用户是否admin from openerp import SUPERUSER_ID if uid == SUPERUSE ...
- python练习程序(c100经典例17)
题目: 输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. def foo(a): l=len(a); letters=0; space=0; digit=0; others=0; f ...
- margin collapse 之父子关系的DIV
打算花点时间将知识整理一下,虽然平时现用现查都能完成工作,可是当遇到面试这种事情的时候,临时查就来不及了... 关于margin,整理若干知识点如下: 一:父子关系的DIV标签以及未加margin时的 ...
- php 二维数组的排序
写这是之前一直二维数组排名困扰.自己写的好复杂. 正题: array_mutisort 官方帮助文档 <?php// 取得列的列表foreach ($data as $key => $ro ...
- mysql利用存储过程批量插入数据
最近需要测试一下mysql单表数据达到1000W条以上时增删改查的性能.由于没有现成的数据,因此自己构造,本文只是实例,以及简单的介绍. 首先当然是建表: [sql]view plaincopy CR ...
- 一:ZooKeeper简介
一:背景 --->随着互联网技术的高速发展,企业对计算机系统的计算,存储能力要求越来越高,最简单的明证就是出现一些诸如:高并发,海量存储这样的词汇.在这样的背景下, ...
- cocos2d-x 2.0 序列帧动画 深入分析
转自:http://blog.csdn.net/honghaier/article/details/8222401 序列帧动画主要有几个类: CCSpriteFrame:精灵帧信息,序列帧动画是依靠多 ...
- 【转】itunes connect 如何修改主要语言
原文网址:http://blog.csdn.net/yuedong56/article/details/50662181 刚开始提交app,没有做国际化(本地化),提交的app只有简体中文一种语言,第 ...