Spring MVC 类型转换(type convert)例子及下载

摘要: spring  支持类型转换, 最常用的就是从字符串转换成一个对象的属性值。在配置spring <bean>时会经常用到。spring 采用了property editor方式对特定的类型进行转换, 并将这些properties editor 注入到spring 容器中去。在spring mvc  中,controller 层中绑定的 对象包含了其他多个对象,这个时候spring mvc 并不能根据你输入的字符串转换成你包含的其他对象,这个时候,就需要转换了,一个最简单的例子,日期字符串到 日期类型的转换。当然这些最基本的类型转换,spring 已经实现了,但也可以自己实现了,我自己做了一个小例子来测试:

spring 支持类型转换, 最常用的就是从字符串转换成一个对象的属性值。在配置spring 时会经常用到。spring 采用了property editor方式对特定的类型进行转换, 并将这些properties editor 注入到spring 容器中去。在spring mvc 中,controller 层中绑定的 对象包含了其他多个对象,这个时候spring mvc 并不能根据你输入的字符串转换成你包含的其他对象,这个时候,就需要转换了,一个最简单的例子,日期字符串到 日期类型的转换。当然这些最基本的类型转换,spring 已经实现了,但也可以自己实现了,我自己做了一个小例子来测试:
场景:一群人约在一个地方见面。包含两个对象。
约会对象,里面包含了这个对象

public class User {
	private String name;
	private String phone;
	
	public User(){
		
	}	
	public User(String name,String phone){
	    this.name=name;
	    this.phone=phone;
	}

	/*getter setter*/

}

public class Reservation {

	public String address;
	public Date dateToReserve;
	public int hour;
	public User user;
	
	public Reservation(){
		
	}

	public Reservation(String address, Date date, int hour, User user) {
		this.address = address;
		this.dateToReserve = date;
		this.hour = hour;
		this.user = user;
	}	

	public String getAddress() {
		return address;
	}

	/*geter setter.*/

}



按照通常的做法,spring 应该如下配置:

	
	
	
	
		
			
			
		
		



上面的做法看上去很好吗?很直观吗?我不觉得,其实更直观的是如下方式:

	
	
	
		


这种方式更直观,也更好看,但是要使这样的配置能正常工作,就需要用到自定义的类型转换. 这里我实现了两个类型转换,一个是用来转换时间的,另一个是用来转换 user 的。
public class StringToDateTypeConverter implements Converter {

	public Date convert(String dateStr) {	
		Date date = null;
		try{
			SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
			date = sd.parse(dateStr);			
		} catch (Exception e) {
			throw new ConversionFailedException(TypeDescriptor.valueOf(String.class), 
					TypeDescriptor.valueOf(Date.class), dateStr, null);
		}		
		return date;
	}
}

public class StringToUserTypeConverter implements Converter {

	public User convert(String userString) {	
		User user = new User();
		try{
			String[] userInfo = userString.split(",");
			if (userInfo.length>=1){
				user.setName(userInfo[0]);				
			}
			if (userInfo.length>=2){
				user.setPhone(userInfo[1]);				
			}					
		} catch (Exception e) {
			throw new ConversionFailedException(TypeDescriptor.valueOf(String.class), 
					TypeDescriptor.valueOf(User.class), userString, null);
		}		
		return user;
	}
}


如何能在 spring mvc 下工作呢? 需要在 spring-servlet.xml 中进行如下配置;


	
	
		
			
			
		
	
	



注册这谢自定义类型转换之后,spring 遇到相应的关系,就会自动转换。我自己做了一个测试列子,有如下页面:

address
Reservation Date
Hour
User


可以看到在 user 字段,输入是 "summer,130121233443 ", 提交之后,会自动转换成 Reservation对象中User 对象中的属性。

提交后看转换结果。


源码下载,省略了jar 包,用spring 相关jar包就可以了,我用的是3.2的。
spring type convert

通过这种类型转换,可以很方便的实现字符串和对象之间的转换,也许有人说,这不就是拆字符串吗?的确是,但如果很多地方需要这种绑定的时候,好处就体现出来了,如果单独偶尔一个确实没必要用。

另一种思考,起始现在 富客户端越来越流行,完全可以用js 生成 json 然后提交到 spring controller 层,然后将json 对象反序列换成 我们需要的object ,这种方式可能更流行了。

上一篇: mybatis补充教程之三:缓存(cache)的使用
下一篇: 用java 代码将 ubb编辑器转为ueditor 编辑器 的 html格式
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号