在javaweb项目的开发过程中,经常遇到要将一个Map集合转换成一个javabean对象,比如说将页面提交的数据封装到一个javabean中。
此小工具需要两个jar包
1:commons-beanutils-1.8.3.jar
2:commons-logging-1.1.3.jar
代码示例:
静态的mapTobean方法
package cn.ccnu.maptobean;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
/*
* 将Map中的数据封装到javabean中
* 使用BeanUtils的populate方法将map中的值封装到javabean中。
* 注意点:可能会遇到String转Date的转换问题。
* 解决办法:
* 自定义类型转换器,然后注册。
*/
public class CommonUtil {
public static <T> T mapTobean(Map map, Class<T> clazz){
try {
T bean = clazz.newInstance();
//注册自定义的类型转换器,以更灵活的控制日期形式
ConvertUtils.register(new DateConverter(), java.util.Date.class);
BeanUtils.populate(bean, map);
return bean;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
自定义的日期类型转换器
package cn.ccnu.maptobean;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.apache.commons.beanutils.Converter;
/*
* 自定义日期转换器,将String转换成Date
*/
public class DateConverter implements Converter{
@Override
public Object convert(Class type, Object value) {
//如果value为空,直接换回空
if(value == null){
return null;
}
//如果value的类型不是String,不作任何处理,直接返回value
if(!(value instanceof String)){
return value;
}
//把value的类型转成String
String val = (String)value;
//使用SimpleDateFormat进行类型转换
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(val);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
测试用的javabeanpackage cn.ccnu.maptobean;
import java.util.Date;
public class User {
private String username;
private Date birthday;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User [username=" + username + ", birthday=" + birthday + "]";
}
}
测试
package cn.ccnu.maptobean;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
public class CommonUtilTest {
@Test
public void test(){
Map<String, String> map = new HashMap<String, String>();
map.put("username", "Alex");
map.put("birthday", "2016-12-12");
User user = CommonUtil.mapTobean(map, User.class);
for(Map.Entry<String, String> entry : map.entrySet()){
System.out.println("key = " + entry.getKey() + " value = " + entry.getValue());
}
System.out.println(user);
}
}