map转bean工具类

该代码片段展示了如何利用Apache Commons BeanUtils库将Map对象转换为指定类型的Java Bean。它注册了一个自定义转换器,将字符串转换为日期,并处理了转换过程中的异常。如果Map为空,则返回null;否则,创建并填充指定类的新实例。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;

import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;



public class MapToBeanUtils {
	/**
	 * 
	 * mapToObject:map转bean. <br/>
	 *
	 * @author jackl Date:2017年4月18日下午6:15:49
	 * @param map
	 * @param beanClass
	 * @return
	 * @throws Exception
	 */
	public static Object mapToObject(Map<String, Object> map, Class<?> beanClass)   {
		ConvertUtils.register(new Converter(){  
            @SuppressWarnings("rawtypes")
            @Override
            public Object convert(Class arg0, Object arg1){
                System.out.println("注册字符串转换为date类型转换器");
                if(arg1 == null){
                    return null;
                }
                if(!(arg1 instanceof String)){
                    throw new ConversionException("只支持字符串转换 !");
                }
                String str = (String)arg1;
                if(str.trim().equals("")){
                    return null;
                }  
                SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
                try{
					return sd.parse(str);
                }catch(ParseException e) {
                	 try {
                		 sd = new SimpleDateFormat("yyyy-MM-dd");  
						return sd.parse(str);
					} catch (ParseException e1) {
						throw new RuntimeException(e);
					}
                }  
            }  

        }, java.util.Date.class);
		
		if (map == null)
			return null;
		Object obj = null;
		try {
			obj = beanClass.newInstance();
			org.apache.commons.beanutils.BeanUtils.populate(obj, map);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return obj;
	}
}
### 将 Map 换为 Java 对象的工具类实现 在 Java 开发中,将 `Map` 数据结构换为 Java 对象是一种常见需求,尤其在处理 HTTP 请求参数、JSON 解析或 ORM 映射等场景时。通过工具类实现该功能可以提升代码的复用性与可维护性。 以下是一个通用的工具类 `MapToBeanConverter`,它通过反射机制将 `Map` 中的键值对映射到 Java 对象的字段上,支持字段名匹配及类型自动换。 ```java import java.lang.reflect.Field; import java.util.Map; public class MapToBeanConverter { /** * 将 Map 换为 Java 对象 * @param map 包含属性值的 Map * @param beanClass 目标 Java 类 * @param <T> 泛型类型 * @return 换后的 Java 对象 */ public static <T> T convert(Map<String, Object> map, Class<T> beanClass) throws Exception { T instance = beanClass.getDeclaredConstructor().newInstance(); Field[] fields = beanClass.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); String fieldName = field.getName(); if (map.containsKey(fieldName)) { Object value = map.get(fieldName); if (value != null && field.getType().isAssignableFrom(value.getClass())) { field.set(instance, value); } } } return instance; } } ``` #### 使用示例 假设存在一个 Java 类 `User`,其字段与 `Map` 中的键相对应。 ```java public class User { private String name; private int age; // Getter and Setter } ``` 调用工具类进行换: ```java import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] args) throws Exception { Map<String, Object> userData = new HashMap<>(); userData.put("name", "李四"); userData.put("age", 30); User user = MapToBeanConverter.convert(userData, User.class); System.out.println(user.getName()); // 输出 "李四" System.out.println(user.getAge()); // 输出 30 } } ``` #### 支持字段类型不一致的换 上述实现仅适用于字段类型一致的情况。若 `Map` 中的值与目标字段类型不完全一致,例如 `String` 到 `int` 的换,需引入额外的类型换逻辑。可以通过 `java.beans.PropertyEditor` 或第三方库如 Apache Commons BeanUtils 实现更复杂的类型换。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值