深入理解Spring MVC的数据转换
发布时间 - 2026-01-11 03:24:05 点击率:次本文主要给大家介绍了关于Spring MVC数据转换的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

数据绑定
SpringMVC负责将request中的信息以一定的方式转换并绑定到处理方法的参数上。整个过程的处理核心是由DataBinder完成。转换流程如下:
1.DataBinder从ServletRequest中获取参数信息;
2.DataBinder获取处理方法的参数;
3.DataBinder调用ConversionService组件数据类型转换和数据格式化工作,并将转化结果填充到参数对象中;
4.DataBinder调用Validator组件进行数据的校验工作;
5.经历以上步骤后,DataBinder将生成BinderResult对象,BinderResult中包含转换后的信息,也包含校验后的错误信息。
数据转换
在java语言中,在java.beans包中提供了一个PropertyEditor接口来进行数据转换,PropertyEditor的核心功能是将一个String转换为一个java对象。Spring从3.0开始添加一个通用的类型转换模块即为org.springframework.convert包中,ConversionService是org.springframework.convert包的核心组件,可以通过使用ConversionServiceFactoryBean在spring的上下文中自定义一个ConversionService,Spring将自动识别这个ConversionService,并在SpringMVC进行参数转换时使用,配置例子如下所示:
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="org.xx..StringToDateConverter" /> </list> </property> </bean>
SpringMVC在支持新的转换器框架的同时,也支持javabeans的PropertyEditor,可以在控制器中使用@InitBinder添加自定义的编辑器。
举例如下:
@Controller
public class DataBinderTestController {
@RequestMapping(value = "/dataBind")
public String test(DataBinderTestModel command) {
......
}
@InitBinder
public void iniiBinder(WebDataBinder binder){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(format, false));
}
}
各种转换器的优先顺序:
1.查询通过@InitBinder自定义的编辑器;
2.查询通过ConversionService装配的自定义转换器;
3.查询通过WebBindingInitializer接口装配的全局自定义编辑器。
Formater
除了org.springframework.core.convert.converter接口中定义的三种类型的转换器接口,SpringMVC在org.springframework.format包中还提供了一些格式化转换接口,format和converter的最大的区别是,converter实现的是object到object的转换,而format实现的是从String到Object的转换,format包中最重要的接口是Formater,Formater的使用示例如下所示:
public class DateFormatter extends Formatter<Date>{
private String datePattern;
private SimpleDateFormat dateFormat;
public DateFormatter(String datePattern){
this.datePattern=datePattern;
this.dateFormat=new SimpleDateFormat(datePattern);
}
public String pring(Date,Locale locale){
return dateFormat.format(date);
}
public Date parse(String source,Locale locale) throws ParseException{
try{
return dateFormat.parse(source);
}catch(Exception e){
......
}
}
}
最后再将DateFormatter注入到ConversionService中,注入方式和Converter的注入方式一样,也可由此发现,ConversionService是数据转换的核心。
Format的注解
在org.springframework.format.annotation包中定义了两个注解,@DateTimeFormat和@NumberFormat 这两个注解可以用在domain中的属性上,SpringMVC处理方法参数绑定数据、模型数据输出时会自动通过注解应用格式化的功能。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
# spring
# mvc
# springmvc类型转换器
# springmvc
# 转换器
# Spring MVC登录注册以及转换json数据
# SpringMVC中Json数据格式转换
# SpringMVC对日期类型的转换示例
# SpringMVC中日期格式的转换
# springMVC4之强大类型转换器实例解析
# springmvc实现自定义类型转换器示例
# SpringMVC实现自定义类型转换器
# 自定义
# 包中
# 绑定
# 编辑器
# 所示
# 的是
# 相关内容
# 说了
# 是由
# 最重要
# 不多
# 并在
# 有一定
# 是从
# 也可
# 这两个
# 可以通过
# 自动识别
# 给大家
# 并将
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
linux写shell需要注意的问题(必看)
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
js代码实现下拉菜单【推荐】
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
使用Dockerfile构建java web环境
Laravel怎么实现模型属性的自动加密
,网页ppt怎么弄成自己的ppt?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
javascript基本数据类型及类型检测常用方法小结
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Bootstrap整体框架之JavaScript插件架构
如何用虚拟主机快速搭建网站?详细步骤解析
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
Android自定义listview布局实现上拉加载下拉刷新功能
桂林网站制作公司有哪些,桂林马拉松怎么报名?
什么是javascript作用域_全局和局部作用域有什么区别?
nodejs redis 发布订阅机制封装实现方法及实例代码
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
网站优化排名时,需要考虑哪些问题呢?
如何在企业微信快速生成手机电脑官网?
Java类加载基本过程详细介绍
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何安全更换建站之星模板并保留数据?
JavaScript如何实现倒计时_时间函数如何精确控制
Python并发异常传播_错误处理解析【教程】
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Python进程池调度策略_任务分发说明【指导】
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
公司门户网站制作流程,华为官网怎么做?
如何在阿里云服务器自主搭建网站?
Python3.6正式版新特性预览
LinuxCD持续部署教程_自动发布与回滚机制
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
西安专业网站制作公司有哪些,陕西省建行官方网站?
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
如何实现javascript表单验证_正则表达式有哪些实用技巧
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
如何快速搭建支持数据库操作的智能建站平台?

