SpringMVC数据绑定与转换代码分析
2017-08-19 00:00
369 查看
代码分析步骤:
1.设置断点
2.启动DEBUG模式
2.1数据绑定
选中上面的行,代码如下:
MutablePropertyValues mpvs = new ServletRequestParameterPropertyValues(request);
这一行代码做的事情就是将request的parameters转换成一个List<PropertyValue>,PropertyValue具有name和value属性,也就是参数名和参数值
得到Method
实现将参数值绑定到POJO的属性上
2.2 数据类型转换
a.日期格式化-@DateTimeFormat 注解
对java.util.Date、java.util.Calendar、java.long.Long 时间类型进行标注:
– pattern 属性:类型为字符串。指定解析/格式化字段数据的模式,
如:”yyyy-MM-dd hh:mm:ss”
– iso 属性:类型为 DateTimeFormat.ISO。指定解析/格式化字段数据的ISO模式,包括四种:ISO.NONE(不使用) -- 默认、ISO.DATE(yyyy-MM-dd) 、ISO.TIME(hh:mm:ss.SSSZ)、ISO.DATE_TIME(yyyy-MM-dd hh:mm:ss.SSSZ)
– style 属性:字符串类型。通过样式指定日期时间的格式,由两位字符组成,第一位表示日期的格式,第二位表示时间的格式:S:短日期/时间格式、M:中日期/时间格式、L:长日期/时间格式、F:完整日期/时间格式、-:忽略日期或时间格式
数值格式化-@NumberFormat 注解
对类似数字类型的属性进行标注,它拥有两个互斥的属性:
– style:类型为 NumberFormat.Style。用于指定样式类型,包括三种:Style.NUMBER(正常数字类型)、Style.CURRENCY(货币类型)、 Style.PERCENT(百分数类型)
– pattern:类型为 String,自定义样式,如patter="#,###";
日期格式举例:
源码分析:
数据类型转换发生setPropertyValue()当中,SpringMVC提供了很多默认的数据类型转换类
这些转换类存放在一个以LinkedHashSet为核心的Converts类中,使用时以ConverterCacheKey(以转换的源类型(String)和目标类型(Date)为参数实例化对象)为KEY,在Converts中找到对应的转换类型
然后将待转换的对象、源类型、目标类型传入到转换类型的convert方法中得到最终结果
1.设置断点
2.启动DEBUG模式
2.1数据绑定
选中上面的行,代码如下:
public void bind(ServletRequest request) { MutablePropertyValues mpvs = new ServletRequestParameterPropertyValues(request); MultipartRequest multipartRequest = WebUtils.getNativeRequest(request, MultipartRequest.class); if (multipartRequest != null) { bindMultipart(multipartRequest.getMultiFileMap(), mpvs); } addBindValues(mpvs, request); doBind(mpvs); }
MutablePropertyValues mpvs = new ServletRequestParameterPropertyValues(request);
这一行代码做的事情就是将request的parameters转换成一个List<PropertyValue>,PropertyValue具有name和value属性,也就是参数名和参数值
final Method writeMethod = (pd instanceof GenericTypeAwarePropertyDescriptor ? ((GenericTypeAwarePropertyDescriptor) pd).getWriteMethodForActualAccess() : pd.getWriteMethod());
得到Method
writeMethod.invoke(this.object, value);
实现将参数值绑定到POJO的属性上
2.2 数据类型转换
a.日期格式化-@DateTimeFormat 注解
对java.util.Date、java.util.Calendar、java.long.Long 时间类型进行标注:
– pattern 属性:类型为字符串。指定解析/格式化字段数据的模式,
如:”yyyy-MM-dd hh:mm:ss”
– iso 属性:类型为 DateTimeFormat.ISO。指定解析/格式化字段数据的ISO模式,包括四种:ISO.NONE(不使用) -- 默认、ISO.DATE(yyyy-MM-dd) 、ISO.TIME(hh:mm:ss.SSSZ)、ISO.DATE_TIME(yyyy-MM-dd hh:mm:ss.SSSZ)
– style 属性:字符串类型。通过样式指定日期时间的格式,由两位字符组成,第一位表示日期的格式,第二位表示时间的格式:S:短日期/时间格式、M:中日期/时间格式、L:长日期/时间格式、F:完整日期/时间格式、-:忽略日期或时间格式
数值格式化-@NumberFormat 注解
对类似数字类型的属性进行标注,它拥有两个互斥的属性:
– style:类型为 NumberFormat.Style。用于指定样式类型,包括三种:Style.NUMBER(正常数字类型)、Style.CURRENCY(货币类型)、 Style.PERCENT(百分数类型)
– pattern:类型为 String,自定义样式,如patter="#,###";
日期格式举例:
源码分析:
数据类型转换发生setPropertyValue()当中,SpringMVC提供了很多默认的数据类型转换类
这些转换类存放在一个以LinkedHashSet为核心的Converts类中,使用时以ConverterCacheKey(以转换的源类型(String)和目标类型(Date)为参数实例化对象)为KEY,在Converts中找到对应的转换类型
然后将待转换的对象、源类型、目标类型传入到转换类型的convert方法中得到最终结果
相关文章推荐
- SpringMVC类型转换、数据绑定详解[附带源码分析]
- SpringMVC类型转换、数据绑定详解[附带源码分析]
- 数据传递--------博客-----------springMVC源码分析--RequestToViewNameTranslator请求到视图名称的转换
- springMvc 数据绑定,类型转换,数据校验 解析
- SpringMVC 类型转换、数据绑定
- ASP.NET 数据绑定常用代码及其性能分析
- SpringMVC类型转换、数据绑定详解
- SpringMVC类型转换、数据绑定
- SpringMVC数据转换,数据绑定,数据验证流程分析
- springMVC对简单对象,Set,List,Map的数据绑定及类型转换
- SpringMVC数据绑定流程分析
- SpringMVC-数据绑定流程分析
- springMVC与MyBatis中绑定枚举类型数据的转换
- ASP.NET 数据绑定常用代码及其性能分析
- SpringMVC-数据绑定流程分析
- springMVC数据绑定、类型转换
- springMvc 数据绑定,类型转换,数据校验 解析
- springMVC4(8)模型数据绑定全面分析
- Spring Framework源码(十二):SpringMVC之数据绑定、验证、转换
- 【SpringMVC】数据处理-数据绑定流程分析