`

SpringMVC(十一)_数据绑定流程之数据转换

阅读更多

       前言:本篇主要介绍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中:

  1. Converter<S,T>:用于转换S类型到T类型,此接口的实现必须是线程安全的且可以被共享。(后面有此转化器的实例)
  2. GenericConverter 和ConditionalGenericConverter:GenericConverter 接口实现能在多种类型之间进行转换,ConditionalGenericConverter 是有条件的在多种类型之间进行转换。
  3. 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,正如前面所示。

         自定义转化器就以上三步,比较简单。

 

 

代码下载来源:http://super-wangj.iteye.com/blog/2388430

分享到:
评论

相关推荐

    SpringMVC入门很简单之数据绑定(下)

    在本篇中,我们将深入探讨SpringMVC框架中的数据绑定,这是Java开发中一个至关重要的概念,尤其是在构建Web应用程序时。SpringMVC是Spring框架的一部分,它为开发RESTful服务和传统的表单提交提供了强大的支持。数据...

    SpringMVC数据类型转换超详细介绍

    SpringMVC自Spring 3版本开始,对数据绑定机制进行了大幅度改进,提供了更为强大和灵活的数据转换与验证功能。本文将详细介绍SpringMVC中数据类型转换的具体实现方式及其背后的工作原理。 #### 二、Spring 3之前的...

    springmvc数据绑定示例程序

    通过这个"springmvc数据绑定示例程序",你可以学习到Spring MVC如何处理请求参数,如何将数据绑定到模型,以及如何在视图中展示这些数据。同时,它也涵盖了数据验证和自定义数据转换的使用,这些都是构建高效、健壮...

    SpringMVC数据绑定入门.rar

    在这个“SpringMVC数据绑定入门”压缩包中,你将找到一系列资源来帮助你理解并掌握SpringMVC的数据绑定机制,这对于任何Java开发者来说都是一个重要的技能。 1. **SpringMVC概述**: SpringMVC作为Spring框架的一...

    SpringMVC入门很简单之数据绑定(上)

    在本文中,我们将深入探讨SpringMVC框架中的数据绑定,这是Spring MVC开发中不可或缺的一部分,尤其是在处理用户输入和展示响应时。数据绑定是将HTTP请求参数与Java对象的属性关联的过程,极大地简化了Web应用程序的...

    springmvc_02 高级参数绑定 异常处理 文件上传

    - **RESTful支持配置**:通过在Spring MVC配置文件中启用注解驱动,即`&lt;mvc:annotation-driven/&gt;`,即可自动支持JSON数据转换等功能。 以上是关于Spring MVC中高级参数绑定、异常处理以及文件上传等相关知识点的...

    springmvc_demo.7z

    - SpringMVC:SpringMVC是Spring框架的一部分,它提供了处理HTTP请求、路由请求到相应的处理器、数据绑定、验证、视图渲染等功能,使得开发基于Servlet的Web应用更加简单。 - 源码:源码通常指的是程序的原始代码,...

    SpringMVC_4.rar.rar

    - SpringMVC支持自动的数据绑定,将请求参数绑定到方法参数。 - 使用JSR-303/JSR-349 Bean Validation进行数据验证。 8. **上传下载** - 使用`MultipartFile`处理文件上传,配合`CommonsMultipartResolver`解析...

    springmvc 参数绑定例子1

    在Spring MVC中,参数绑定是一个核心功能,它允许开发者将HTTP请求中的数据自动映射到控制器方法的参数上,极大地简化了开发流程。下面我们将详细讨论这个主题。 ### 1. Spring MVC 参数绑定基础 参数绑定是Spring...

    spring_springmvc_mybatis整合示例.zip

    - 数据转换器:在数据绑定过程中,可能需要自定义Converter或Formatter来处理特定类型的数据转换。 5. 示例项目: "spring_springmvc_mybatis整合示例.zip"中包含了一个完整的整合项目,开发者可以通过研究源码...

    springMVC入门实例

    随着对SpringMVC的深入学习,你会接触到更多高级特性,如数据绑定、模型验证、异常处理、国际化、RESTful API设计等。通过实践`springmvc_demo_02`,你将能够更好地理解和运用这些概念,为构建复杂的Web应用程序打下...

    Springmvc_DispaterSelvert.zip

    9. **模型绑定@ModelAttribute**:此注解用于将请求参数绑定到方法参数,或者将模型数据注入到视图中。 10. **拦截器Interceptor**:Spring MVC允许定义拦截器,可以在请求处理之前或之后执行预处理或后处理操作,...

    springmvc必备架包_hui

    9. **数据绑定与验证**:Spring MVC 提供了数据绑定功能,可以自动将请求参数映射到控制器方法的参数上。同时,通过 Hibernate Validator 或 JSR-303/JSR-349 规范,可以实现数据验证。 10. **异常处理**:Spring ...

    Springmvc_dinglh

    2. **spring-servlet.xml**:这是 Spring MVC 的配置文件,通常包含 Controller 的bean定义、视图解析器(ViewResolver)配置、数据绑定和类型转换器等。例如,`配置了请求映射处理器适配器,使得 @RequestMapping ...

    专题资料(2021-2022年)SpringMVC数据类型转换要点.doc

    SpringMVC 数据类型转换是Spring Web MVC框架中的一个重要部分,主要负责将HTTP请求中的字符串数据转换为控制器方法中期望的数据类型。在2021-2022年的专题资料中,这一主题聚焦于Spring 3之后引入的新特性和改进,...

    SpringMVC_AngularJS_001

    1. **双向数据绑定**:自动保持视图和模型之间的同步,减少了手动同步的工作。 2. **指令**:扩展HTML,使它能够表达更多的业务逻辑。 3. **服务**:提供可注入的、可复用的功能块,如$http服务用于HTTP请求。 4. **...

    一个简单的springMVC入门项目

    7. **数据绑定**:SpringMVC自动将HTTP请求参数绑定到Controller方法的参数上,反之亦然,将Controller方法的返回值绑定到Model中,便于视图渲染。 8. **异常处理**:SpringMVC提供了一种优雅的方式处理程序中的...

    尚硅谷SpringMVC部分全套教学文档笔记

    3. **数据绑定流程**: - SpringMVC支持自动将请求参数绑定到Controller的方法参数,这涉及到模型绑定和类型转换。 - 数据绑定可以是简单的类型如字符串,也可以是复杂类型如自定义对象,Spring会自动进行转换。 ...

    狂神说springmvc笔记.zip

    它是一个基于模型-视图-控制器(MVC)架构的轻量级Java Web框架,提供了强大的数据绑定、校验和类型转换功能,简化了Java Web开发流程。在"狂神说springmvc笔记.zip"这个压缩包中,我们可以期待找到关于SpringMVC的...

Global site tag (gtag.js) - Google Analytics