`

Spring的类型转换

阅读更多
为什么需要类型转化?

用Hibernate时,往往需要添加一对多或多对一映射。比如下面这个持久化类。

package cn.sjsedu.ipbind.bean;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="computer")
public class Computer {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
	private String username;
	private String name;
	private String ip;
	private String ipv6;
	private String mac;
	private String hdserial;

	@ManyToOne
	@JoinColumn(name="school_id")
	private School school;
	
	//setter and getter method
}



再看这个表单页面

	<form:form commandName="computer" action="save" method="post">
		<form:errors path="*" element="div"></form:errors>
		使用者:<form:input path="username"/><br/>
		计算机名:<form:input path="name"/><br/>
		IP地址:<form:input path="ip" /><br/>
		MAC地址:<form:input path="mac" /><br/>
		硬盘序列号:<form:input path="hdserial" /><br/>
		学校:<form:input path="school" />
		<input type="submit" value="提交"/>
	</form:form>


Spring提供了一些简单的基本转化,比如String转Integer,但是怎么吧String转为School类型呢。这就需要自定义类型转化了。


如何定义自己的类型转换?

Spring提供了三种SPI。(问题:什么是SPI?与API有什么区别?)

分别是:

1. Converter
package org.springframework.core.convert.converter;

public interface Converter<S, T> {

    T convert(S source);

}


2. ConverterFactory
package org.springframework.core.convert.converter;

public interface ConverterFactory<S, R> {

    <T extends R> Converter<S, T> getConverter(Class<T> targetType);

}


3. GenericConverter
package org.springframework.core.convert.converter;

public interface GenericConverter {

    public Set<ConvertiblePair> getConvertibleTypes();

    Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType);

}


只要实现这些接口就行了。

那么写好了自己的转化类,该如何使用?

只需要在WebApplicationContext中加入如下代码:
<!--下面这行一定要有-->
<mvc:annotation-driven conversion-service="conversionService"/>

<bean id="conversionService"
      class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <list>
            <!--替换自己的类名-->
            <bean class="example.MyCustomConverter"/>
        </list>
    </property>
</bean>



这样就Okey了。

参考文献http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/validation.html#core-convert
分享到:
评论

相关推荐

    第十五章 Spring 类型转换(Type Conversion)1

    Spring 3.0 引入了通用类型转换接口,包括 `Converter` 和 `GenericConverter`,它们提供了更为强大的类型转换功能,不仅限于简单的 String 到其他类型的转换。`Converter` 接口适用于一对一的类型转换,而 `...

    Spring类型转换 ConversionSerivce Convertor解析

    本文将深入解析Spring类型转换`ConversionService`和`Convertor`的概念及其用法。 `ConversionService`是Spring提供的核心接口,用于执行各种类型之间的转换操作。它的主要职责是接收一个对象并尝试将其转换为另一...

    spring-framework-4-reference

    Spring类型转换系统提供了一个全面的类型转换服务,支持各种类型之间的转换。Spring还提供了一套标准的日期和时间格式化配置。 最后,Spring Expression Language (SpEL)部分介绍了Spring表达式语言,它是一个强大...

    spring-framework-5.0 中文文档PDF

    此外,还可能涵盖了Spring类型转换和字段格式化的实现,包括如何配置全局的日期和时间格式。 Spring表达式语言(SpEL)是Spring Framework支持的一种强大的表达式语言,可以在运行时查询和操作对象图。文档中可能...

    Spring5.1中文参考指南.pdf

    - **Spring类型转换**:Spring支持多种类型转换策略。 - **Spring字段格式化**:如何格式化日期等类型字段。 - **配置全局Date和Time格式**:统一配置日期时间格式。 - **SpEL(Spring Expression Language)** -...

    spring数据格式转换

    最后,对于`UserState`这样的枚举类型,Spring可以通过`Enum`类型转换器自动处理,但如果需要自定义转换逻辑,也可以创建一个`PropertyEditor`,覆盖`setAsText()`方法,将字符串转换为对应的枚举值。 总的来说,...

    Spring MVC学习(七)-------SpringMVC数据类型转换

    ### Spring MVC 数据类型转换详解 #### 一、背景与需求 在进行Web应用开发时,尤其是在使用Spring MVC框架的过程中,经常需要对用户提交的数据进行处理,包括但不限于数据类型转换、数据验证以及数据格式化等操作...

    第十九章 Spring Environment 抽象(Environment Abstraction)1

    10. **Spring类型转换** Spring提供了类型转换系统,包括在`Environment`和`@Value`中使用。它可以将配置属性的字符串值自动转换为所需的数据类型。 11. **Spring配置属性源的扩展** 可以通过API或注解的方式扩展...

    SpringBoot中自定义消息转换器示例源码

    `canRead`和`canWrite`用于判断转换器是否能处理指定类型的数据,`read`和`write`则是实际执行转换操作的方法。 ```java import org.springframework.http.HttpInputMessage; import org.springframework....

    29 Spring MVC之类型转换Converter慕课专栏1

    在Spring MVC中,类型转换是将用户输入的数据(通常是字符串)转换为模型对象中的预期类型。在早期版本中,我们依赖于`PropertyEditor`来完成这个任务,它只能处理从`String`到其他类型的转换。然而,随着Spring的...

    自定义全局类型转换器

    Spring框架提供了强大的数据绑定功能,其中就包括自动类型转换。然而,有时系统默认的转换器可能无法满足我们所有的需求,这时就需要自定义全局类型转换器。本文将深入探讨如何实现自定义全局类型转换器,以提升系统...

    自己写的转换器,包含各种基本的数据类型。

    类型转换器的使用场景广泛,不仅限于Struts1框架,还可以应用到Spring MVC、Java EE的JSF等其他框架中。在实际开发中,一个良好的类型转换器设计可以提高代码的可维护性和灵活性,减少因类型不匹配导致的运行时异常...

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

    #### 二、Spring 3之前的类型转换与验证 在Spring 3之前,类型转换主要依赖于`PropertyEditor`接口。`PropertyEditor`负责将字符串转换为对象或反之,但在实际应用中存在以下问题: 1. **转换范围有限**:`...

    SpringMVC数据绑定及数据类型转换

    在SpringMVC中,数据绑定和数据类型转换是两个关键的概念,它们对于构建高效、健壮的Web应用至关重要。 **数据绑定**是SpringMVC中的一种机制,允许我们将用户通过表单或其他方式提交的请求参数自动绑定到控制器中...

    第12章spring-mvc自定义类型转换器

    第12章spring-mvc自定义类型转换器

    Spring-Framework-4.x参考文档.pdf

    - **3.3.5 Spring 类型转换**: Spring 支持自动类型转换,提高了开发效率。 - **3.3.6 Spring 字段格式化**: 介绍了如何定制字段的格式化规则。 - **3.3.7 全局日期与时间格式配置**: 如何配置全局的日期和时间格式...

    SSM笔记-自定义类型转换器

    这涉及到类型转换,SpringMVC提供了一套完善的机制来支持自定义类型转换器,使得我们能够按需定制数据转换逻辑,从而提高代码的可读性和维护性。 标题中的"SSM笔记-自定义类型转换器"指的是在SpringMVC中创建自定义...

    struts2自定义类型转换器

    Struts2作为一款流行的Java Web框架,其在处理表单数据和模型对象之间的转换时,提供了强大的类型转换机制。在默认情况下,Struts2能够自动处理基本类型和简单类型的转换,但当我们需要对复杂的数据类型或者自定义...

    一款spring提供的高效数据转换工具最新版

    标题中的“一款spring提供的高效数据转换工具最新版”指的是Spring框架中的一个组件,它用于处理数据转换,特别是JSON数据的序列化与反序列化。在Spring生态中,这个工具可能是Spring Data REST或Spring MVC的一部分...

Global site tag (gtag.js) - Google Analytics