首页 > 代码库 > 自定义日期类型转换器

自定义日期类型转换器


(1)首先看一下项目的布局结构:


(2)要准备的两个jar包,在lib目录下的,commons-beanutils-1.8.3.jar   commons-logging-1.1.1.jar这两个是必须的  要提前引入,以免不必要的麻烦!


并且下边要注意包的引入 :是在org.apache下的 不是在com.sum.org.apache下的  错误的话 不会成功!


(3)全部代码如下:(有注释 这里不再解释)

1.User.java

package com.lc.commons;

public class User {

	private String username;
	private String password;
	private int age;
	private java.util.Date birthdate;
	//get set方法

	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password
				+ ", age=" + age + ", birthdate=" + birthdate + "]";
	}

}


2.DateConverter.java(实现Converter接口)

package com.lc.commons;

import java.text.ParseException;
import java.text.SimpleDateFormat;


import org.apache.commons.beanutils.Converter;
/**
 * 把String转化为java.util.Date的类型转换器
 * @author xuliugen
 *
 */
public class DateConverter implements Converter {

	public Object convert(Class type, Object value) {
		if(value =http://www.mamicode.com/= null) return null; //如果要转换的值为null 直接返回>
3.CommonUtils.java

package com.lc.commons;

import java.util.Map;
import java.util.UUID;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;


/**
 * 小工具类
 * 
 * @author xuliugen
 * 
 */
public class CommonUtils {

	/**
	 * 返回一个不重复的字符串
	 * 
	 * @return
	 */
	public static String uuid() {
		return UUID.randomUUID().toString().replace("-", "").toUpperCase();
	}

	/**
	 * 把map转化成对象
	 * 
	 * @param map
	 * @param calzz
	 * @return 
	 * 
	 * 把Map转化成指定类型
	 */
	public static <T> T toBean(Map map, Class<T> clazz) {
		try {
			/*
			 * 1.通过参数clazz创建实例
			 * 2.使用BeanUtils.populate把map的数据封闭到bean中
			 */
			T bean = clazz.newInstance();
			/*
			 * 自定义的类型转换器DateConverter()
			 * 1.第一个参数为自定义的转换器
			 * 2.第二个参数为目标类型
			 */
			ConvertUtils.register(new DateConverter(),java.util.Date.class);
			BeanUtils.populate(bean, map);
			return bean;

		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

}

4.Demo.java用于测试


package com.lc.commons;

import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

public class Demo {

	/*
	 * 写一个map,map中的String要封装到User的age中
	 */
	@Test
	public void fun1() {
		Map<String, String> map = new HashMap<String, String>();

		map.put("username", "张三");
		map.put("password", "123");
		map.put("age", "55");
		
		User user = CommonUtils.toBean(map,User.class);
		System.out.println(user);
	}
	/**
	 * 不可以把String转化为java.util.Date,需要我们注册一个类型转换器
	 * 1.写一个类型转化器,用来把String转化为Date
	 * 2.
	 */
	@Test
	public void fun2() {
		Map<String, String> map = new HashMap<String, String>();

		map.put("username", "张三");
		map.put("password", "123");
		map.put("age", "55");
		map.put("birthday", "2013-01-29");
		
		User user = CommonUtils.toBean(map,User.class);
		System.out.println(user);
	}
}




结果出来  以后可以以此类比 写出其他类型的转换器



自定义日期类型转换器