自定义日期类型转换器
(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 + "]";
}
}
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 == null) return null; //如果要转换的值为null 直接返回
if(value instanceof String){ //如果要转换的不是String 直接返回
return value;
}
String val = (String) value; //把值转化为String
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(val);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
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);
}
}
结果出来 以后可以以此类比 写出其他类型的转换器