1、字符串与对象字段应该相对应
Object dto = new User();
public String assembleCoreDTO(String line, Object dto) throws BaseApplicationException {
String errInfo = "";
try {
// 栏位数组
String[] fieldVals = line.split("\\|@\\|");
// 装载DTO
Field[] fields = dto.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
String fieldVal = fieldVals[i].trim();
Field field = fields[i];
try {
if (!StringUtils.isEmpty(fieldVal)) {
String methodName = "set" + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1);
if (BigDecimal.class.getName().equals(field.getType().getTypeName())) {
Method method = dto.getClass().getMethod(methodName, BigDecimal.class);
method.invoke(dto, new BigDecimal(fieldVal));
} else if (Integer.class.getName().equals(field.getType().getTypeName())) {
Method method = dto.getClass().getMethod(methodName, Integer.class);
method.invoke(dto, Integer.valueOf(fieldVal));
} else if (Timestamp.class.getName().equals(field.getType().getTypeName())) {
Method method = dto.getClass().getMethod(methodName, Timestamp.class);
method.invoke(dto, new Timestamp(DateUtil.stringToDate(fieldVal).getTime()));
} else if (Date.class.getName().equals(field.getType().getTypeName())) {
Method method = dto.getClass().getMethod(methodName, Date.class);
method.invoke(dto, DateUtil.stringToDate(fieldVal, DateUtil.DATE_PATTERN_YYYY_MM_DD));
} else {
Method method = dto.getClass().getMethod(methodName, String.class);
method.invoke(dto, fieldVal);
}
}
} catch (Exception e) {
DlValidate dlValidate = field.getDeclaredAnnotation(DlValidate.class);
if (dlValidate.desc() != null) {
errInfo += dlValidate.desc() + "解析异常;";
} else {
errInfo += "第" + (i + 1) + "个栏位解析异常;";
}
}
}
} catch (Exception e) {
errInfo += "数据格式错误;";
}
return errInfo;
}
//返回后dto就有值了