javaweb开发过程中小工具系列之将Map转换成对象

本文介绍了一种将Map集合转换为JavaBean对象的方法,并提供了一个实用的工具类。该工具利用了Apache Commons BeanUtils库来简化转换过程,同时解决了String到Date类型的转换问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在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);
		}
	}
}
测试用的javabean
package 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);
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值