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了。

参考文献[url]http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/validation.html#core-convert[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值