工具类:
package com.itheima.util;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ListMapToBeanUtils {
/**
* List<Map<String, Object>>转List<T>
*/
public static <T> List<T> castMapToBean(List<Map<String, String>> list, Class<T> clazz) throws Exception {
if (list == null || list.size()==0) {
return null;
}
List<T> tList = new ArrayList<T>();
// 获取类中声明的所有字段
Field[] fields = clazz.getDeclaredFields();
T t;
for (Map<String, String> map : list) {
// 每次都先初始化一遍,然后再设置值
t = clazz.newInstance();
for (Field field : fields) {
// 把序列化的字段去除掉
if (!"serialVersionUID".equals(field.getName())) {
// 由于Field都是私有属性,所有需要允许修改
field.setAccessible(true);
// 设置值, 类型要和vo中的属性名称对应好,不然会报类型转换错误
field.set(t, map.get(field.getName()));
}
}
tList.add(t); // 把转换好的数据添加到集合中
}
return tList;
}
}
VO:
package com.itheima.common.entity;
import lombok.Data;
@Data
public class Department {
private String key;
private String title;
private String value;
}
测试:
@Override
public Result getQuestionBdDept(HttpServletRequest request) throws Exception {
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> map1=new HashMap<>();
map1.put("001","张三");
map1.put("002","李四");
map1.put("003","王五");
map1.put("004","赵六");
list.add(map1);
List<Department> newList = ListMapToBeanUtils.castMapToBean(list , Department.class);
return Result.success().result(newList );
}
测试输出:
{
"data": [
{
"key": "001",
"title": "张三",
"value": "001"
},
{
"key": "002",
"title": "李四",
"value": "002"
},
{
"key": "003",
"title": "王五",
"value": "003"
},
{
"key": "004",
"title": "赵六",
"value": "004"
}
],
"code": 200,
"message": "OK"
}