前言:本篇主要介绍SpringMVC的数据绑定流程中数据转换的相关概念与用法。
本篇文章重点关注以下问题:
- SpringMVC內建转换器
-
自定义转化器
1. 內建转化器
Spring MVC 上下文中内建了很多转换器,可完成大多数 Java 类型的转换工作。
第一组:标量转换器
StringToBooleanConverter | String—–>Boolean(true:true/on/yes/1;false:false/off/no/0) |
ObjectToStringConverter | Object—–>String (调用toString方法转换) |
StringToNumberConverterFactory | String—–>Number(如Integer、Long等) |
NumberToNumberConverterFactory | Number子类型<——>Number子类型(Integer、Long、Double等) |
StringToCharacterConverter | String —–>java.lang.Character 取字符串第一个字符 |
NumberToCharacterConverter | Number子类型(Integer、Long、Double等)——> java.lang.Character |
CharacterToNumberFactory | java.lang.Character ——>Number子类型(Integer、Long、Double等) |
StringToEnumConverterFactory | String—–>enum类型 (通过Enum.valueOf将字符串转换为需要的enum类型) |
EnumToStringConverter | enum类型—–>String (返回enum对象的name()值) |
StringToLocaleConverter | String—–>java.util.Local |
PropertiesToStringConverter | java.util.Properties—–>String (默认通过ISO-8859-1解码) |
StringToPropertiesConverter |
String—–>java.util.Properties (默认通过ISO-8859-1解码) |
第二组:集合、数组相关转换器
ArrayToCollectionConverter | 任意S数组—->任意T集合(List、Set) |
CollectionToArrayConverter | 任意T集合(List、Set)—->任意S数组 |
ArrayToArrayConverter | 任意S数组<—->任意T数组 |
CollectionToCollectionConverter | 任意T集合(List、Set)<—->任意T集合(List、Set) 即集合之间的类型转换 |
MapToMapConverter | Map<—->Map之间的转换 |
ArrayToStringConverter | 任意S数组—->String类型 |
StringToArrayConverter | String—–>数组 默认通过“,”分割,且去除字符串的两边空格(trim) |
ArrayToObjectConverter |
任意S数组—->任意Object的转换 (如果目标类型和源类型兼容,直接返回源对象;否则返回S数组的第一个元素并进行类型转换) |
ObjectToArrayConverter | Object—–>单元素数组 |
CollectionToStringConverter | 任意T集合(List、Set)—->String类型 |
StringToCollectionConverter | String—–>集合(List、Set)(默认通过“,”分割,且去除字符串的两边空格(trim)) |
CollectionToObjectConverter |
任意T集合—->任意Object的转换 (如果目标类型和源类型兼容,直接返回源对象;否则返回S数组的第一个元素并进行类型转换) |
ObjectToCollectionConverter | Object—–>单元素集合 |
第三组:默认(fallback)转换器:之前的转换器不能转换时调用
ObjectToObjectConverter | Object(S)—–>Object(T)(首先尝试valueOf进行转换、没有则尝试new 构造器(S)) |
IdToEntityConverter |
Id(S)—–>Entity(T) 查找并调用public static T findEntityName获取目标对象,EntityName是T类型的简单类型 |
FallbackObjectToStringConverter |
Object—–>String ConversionService 作为恢复使用,即其他转换器不能转换时调用(执行对象的toString()方法) |
2 自定义转换器
ConversionService是Spring类型转换体系的核心接口,可以利用 ConversionServiceFactoryBean在Spring的IOC容器中定义一个ConversionService,Spring 将自动识别出IOC 容器中的ConversionService,并在 Bean属性配置及Spring MVC 处理方法入参绑定等场合使用它进行数据的转换。可通过ConversionServiceFactoryBean的converters属性注册自定义的类型转换器口。
<!-- 配置 ConversionService --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <ref bean="addressConverter"/> </set> </property> </bean>
<mvc:annotation-driven conversion-service=“conversionService”/> 会将自定义的 ConversionService 注册到Spring MVC 的上下文中。
<!-- 开启注解 --> <mvc:annotation-driven conversion-service="conversionService" />
2.1 SpringMVC支持的转化器
Spring 定义了 3 种类型的转换器接口,实现任意一个转换器接口都可以作为自定义转换器注册到ConversionServiceFactroyBean中:
- Converter<S,T>:用于转换S类型到T类型,此接口的实现必须是线程安全的且可以被共享。(后面有此转化器的实例)
- GenericConverter 和ConditionalGenericConverter:GenericConverter 接口实现能在多种类型之间进行转换,ConditionalGenericConverter 是有条件的在多种类型之间进行转换。
- ConverterFactory:工厂模式的实现,用于选择将一种S源类型转换为R类型的子类型T的转换器的工厂接口。(例如将 String 转换为 Number 及 Number 子类(Integer、Long、Double 等)对象)
2.2 自定义转换器实例
需求:前台以"江苏-南京"的形式传给后台,后台以实体类接收此信息:
1. 利用Converter<S,T>实现自定义转换器,首先明确S,T的类型,此处自定义转化器将String类型转换为实体类AddressVo,因此S为String,T为AddressVo,先看下实体类:
public class AddressVo { private String province; private String city; public AddressVo(String province, String city) { this.province = province; this.city = city; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } @Override public String toString() { return "Address [province=" + province + ", city=" + city + "]"; } }
2. 然后是转换器:
@Component public class AddressConverter implements Converter<String, AddressVo> { @Override public AddressVo convert(String source) { if(source != null){ String [] vals = source.split("-"); // 江苏-南京 if(vals != null && vals.length == 2){ String province = vals[0]; String city = vals[1]; return new AddressVo(province, city); } } return null; } }
3. 将此转化器注册到ConversionService,正如前面所示。
自定义转化器就以上三步,比较简单。
相关推荐
在本篇中,我们将深入探讨SpringMVC框架中的数据绑定,这是Java开发中一个至关重要的概念,尤其是在构建Web应用程序时。SpringMVC是Spring框架的一部分,它为开发RESTful服务和传统的表单提交提供了强大的支持。数据...
SpringMVC自Spring 3版本开始,对数据绑定机制进行了大幅度改进,提供了更为强大和灵活的数据转换与验证功能。本文将详细介绍SpringMVC中数据类型转换的具体实现方式及其背后的工作原理。 #### 二、Spring 3之前的...
通过这个"springmvc数据绑定示例程序",你可以学习到Spring MVC如何处理请求参数,如何将数据绑定到模型,以及如何在视图中展示这些数据。同时,它也涵盖了数据验证和自定义数据转换的使用,这些都是构建高效、健壮...
在这个“SpringMVC数据绑定入门”压缩包中,你将找到一系列资源来帮助你理解并掌握SpringMVC的数据绑定机制,这对于任何Java开发者来说都是一个重要的技能。 1. **SpringMVC概述**: SpringMVC作为Spring框架的一...
在本文中,我们将深入探讨SpringMVC框架中的数据绑定,这是Spring MVC开发中不可或缺的一部分,尤其是在处理用户输入和展示响应时。数据绑定是将HTTP请求参数与Java对象的属性关联的过程,极大地简化了Web应用程序的...
- **RESTful支持配置**:通过在Spring MVC配置文件中启用注解驱动,即`<mvc:annotation-driven/>`,即可自动支持JSON数据转换等功能。 以上是关于Spring MVC中高级参数绑定、异常处理以及文件上传等相关知识点的...
- SpringMVC:SpringMVC是Spring框架的一部分,它提供了处理HTTP请求、路由请求到相应的处理器、数据绑定、验证、视图渲染等功能,使得开发基于Servlet的Web应用更加简单。 - 源码:源码通常指的是程序的原始代码,...
- SpringMVC支持自动的数据绑定,将请求参数绑定到方法参数。 - 使用JSR-303/JSR-349 Bean Validation进行数据验证。 8. **上传下载** - 使用`MultipartFile`处理文件上传,配合`CommonsMultipartResolver`解析...
在Spring MVC中,参数绑定是一个核心功能,它允许开发者将HTTP请求中的数据自动映射到控制器方法的参数上,极大地简化了开发流程。下面我们将详细讨论这个主题。 ### 1. Spring MVC 参数绑定基础 参数绑定是Spring...
- 数据转换器:在数据绑定过程中,可能需要自定义Converter或Formatter来处理特定类型的数据转换。 5. 示例项目: "spring_springmvc_mybatis整合示例.zip"中包含了一个完整的整合项目,开发者可以通过研究源码...
随着对SpringMVC的深入学习,你会接触到更多高级特性,如数据绑定、模型验证、异常处理、国际化、RESTful API设计等。通过实践`springmvc_demo_02`,你将能够更好地理解和运用这些概念,为构建复杂的Web应用程序打下...
9. **模型绑定@ModelAttribute**:此注解用于将请求参数绑定到方法参数,或者将模型数据注入到视图中。 10. **拦截器Interceptor**:Spring MVC允许定义拦截器,可以在请求处理之前或之后执行预处理或后处理操作,...
9. **数据绑定与验证**:Spring MVC 提供了数据绑定功能,可以自动将请求参数映射到控制器方法的参数上。同时,通过 Hibernate Validator 或 JSR-303/JSR-349 规范,可以实现数据验证。 10. **异常处理**:Spring ...
2. **spring-servlet.xml**:这是 Spring MVC 的配置文件,通常包含 Controller 的bean定义、视图解析器(ViewResolver)配置、数据绑定和类型转换器等。例如,`配置了请求映射处理器适配器,使得 @RequestMapping ...
SpringMVC 数据类型转换是Spring Web MVC框架中的一个重要部分,主要负责将HTTP请求中的字符串数据转换为控制器方法中期望的数据类型。在2021-2022年的专题资料中,这一主题聚焦于Spring 3之后引入的新特性和改进,...
1. **双向数据绑定**:自动保持视图和模型之间的同步,减少了手动同步的工作。 2. **指令**:扩展HTML,使它能够表达更多的业务逻辑。 3. **服务**:提供可注入的、可复用的功能块,如$http服务用于HTTP请求。 4. **...
7. **数据绑定**:SpringMVC自动将HTTP请求参数绑定到Controller方法的参数上,反之亦然,将Controller方法的返回值绑定到Model中,便于视图渲染。 8. **异常处理**:SpringMVC提供了一种优雅的方式处理程序中的...
3. **数据绑定流程**: - SpringMVC支持自动将请求参数绑定到Controller的方法参数,这涉及到模型绑定和类型转换。 - 数据绑定可以是简单的类型如字符串,也可以是复杂类型如自定义对象,Spring会自动进行转换。 ...
它是一个基于模型-视图-控制器(MVC)架构的轻量级Java Web框架,提供了强大的数据绑定、校验和类型转换功能,简化了Java Web开发流程。在"狂神说springmvc笔记.zip"这个压缩包中,我们可以期待找到关于SpringMVC的...