公司使用JFinal框架,发现JFinal中Record数据无法通过fastjson直接转实体类对象,只能使用record各种get获取数据,实在是无法忍受,写了两个简单方法(还需完善)
/**
* Record数据转换为对象
* <li>暂时只写了Record数据中String,int,BigDecimal,boolean数据类型的转换,其它类型需要的话再加</li>
*
*
* @param record Record数据
* @param clazz 实体类Class
* @param <T> 泛型
* @return 实体类
* @throws Exception 抛出异常
*/
public static <T> T parseObject(Record record, Class<T> clazz) throws Exception{
if (record == null){
return null;
}
T vo = clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
String fieldName = field.getName();
field.setAccessible(true);
//根据类型赋值
String fieldClassName = field.getType().getSimpleName();
Object obj = record.get(fieldName);
if (obj != null) {
if ("String".equalsIgnoreCase(fieldClassName)) {
field.set(vo, obj.toString());
}else if ("int".equals(fieldClassName) || "Integer".equals(fieldClassName)) {
field.set(vo,Integer.parseInt(obj.toString()));
}else if ("BigDecimal".equalsIgnoreCase(fieldClassName)){
field.set(vo, new BigDecimal(obj.toString()));
}else if ("boolean".equals(fieldClassName)){
field.set(vo,obj);
}
}
}
return vo;
}
/**
* Record数据集合转为实体类List集合
*
* @param recordList Record数据
* @param clazz 实体类
* @param <T> 泛型
* @return 实体类List集合
* @throws Exception 抛出异常
*/
public static <T> List<T> parseArray(List<Record> recordList, Class<T> clazz) throws Exception{
if (recordList == null || recordList.size() == 0){
return null;
}
List<T> list = new ArrayList<>();
for (Record record : recordList){
list.add(parseObject(record, clazz));
}
return list;
}
网友评论