全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

从map到对象的转换

发布时间:2023-11-21 04:11:27
发布人:xqq

一、Java中map转对象的方式

在Java中,我们通常使用以下方法将Map转换为对象:

public static void mapToObject(Map map, Object obj) throws Exception {
    if (map == null) {
        return;
    }
    Class cls = obj.getClass();
    for (Field field : cls.getDeclaredFields()) {
        String name = field.getName();
        Object value = map.get(name);
        if (value != null) {
            field.setAccessible(true);
            field.set(obj, value);
        }
    }
}

该方法的功能是将Map中的值转换为对象的字段值。首先,我们获取对象的类及其所有字段,然后使用反射设置每个字段的值。

由该方法的实现可以看出,Map的Key必须与对象的字段名相同,而Map的Value必须与对象的字段类型相同或可转换为字段类型。

以下是示例代码:

public class User {
    private String name;
    private Integer age;
    //getters and setters
}

public static void main(String[] args) throws Exception {
    Map map = new HashMap<>();
    map.put("name", "Tom");
    map.put("age", 18);
    User user = new User();
    mapToObject(map, user);
    System.out.println(user.getName()); //"Tom"
    System.out.println(user.getAge()); //18
}

二、Spring中map转对象的方式

在Spring框架中,我们可以使用DataBinder类将Map转换为对象。

public static  void mapToObject(Map map, T obj) {
    DataBinder binder = new DataBinder(obj);
    binder.bind(new MutablePropertyValues(map));
}

该方法使用Spring提供的DataBinder类,数据绑定器将数据从源Map转换并绑定到目标对象中。

值得注意的是,该方法不要求Map中Key必须与对象的字段名相同,它将根据字段的类型进行转换。

以下是示例代码:

@Component
public class User {
    private String name;
    private Integer age;
    //getters and setters
}

@Autowired
private User user;

@Autowired
private ApplicationContext context;

public void mapToUser() {
    Map map = new HashMap<>();
    map.put("name", "Tom");
    map.put("age", "18");
    mapToObject(map, user);
    System.out.println(user.getName()); //"Tom"
    System.out.println(user.getAge()); //18
}

三、使用第三方库convertutils进行map转对象

如果我们要处理更复杂的数据类型并且需要类型转换,则可以使用Apache的commons-beanutils库。

public static  void mapToObject(Map map, T obj) throws IllegalAccessException, InvocationTargetException {
    ConvertUtils.register(new SqlTimestampConverter(null), java.sql.Timestamp.class);
    PropertyUtils.populate(obj, map);
}

该方法使用Apache Commons的BeanUtils,它使用ConvertUtils进行类型转换。在调用populate()方法之前,需要注册SqlTimestampConverter以支持java.sql.Timestamp转换。

以下是示例代码:

public class User {
    private String name;
    private Integer age;
    private Timestamp createTime;
    //getters and setters
}

public static void main(String[] args) throws Exception {
    Map map = new HashMap<>();
    map.put("name", "Tom");
    map.put("age", "18");
    map.put("createTime", "2022-08-25 12:00:00");
    User user = new User();
    mapToObject(map, user);
    System.out.println(user.getName()); //"Tom"
    System.out.println(user.getAge()); //18
    System.out.println(user.getCreateTime()); //2022-08-25 12:00:00.0
}

四、总结

在Java中,可以使用不同的方法将Map转换为对象。使用反射、数据绑定器或第三方库等。

无论使用哪种方法,都需要注意Map中Key必须与对象的字段名相同,而Map中的Value必须与对象的字段类型相同或可转换为字段类型。如此,就可以轻易地将Map转换为对象。

map转对象

相关文章

long比较大小详解

long比较大小详解

2023-11-21
HTTP状态码413

HTTP状态码413

2023-11-21
HTML弹框用法介绍

HTML弹框用法介绍

2023-11-21
SCP拷贝文件夹详解

SCP拷贝文件夹详解

2023-11-21

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31
在线咨询 免费试学 教程领取