页面上传一个csv文件,check文件内容,如果不满足要求,则返回错误信息,反之则登录数据。(仅供参考)
1.导入依赖(opencsv.jar)
2.创建工具类
UserErrorInfo.java(存放错误信息)
public class UserErrorInfo {
/**
* 行番号
*/
private int rowIndex;
/**
* 用户ID
*/
private String userId;
/**
* 用户名
*/
private String userName;
/**
* 错误信息
*/
private List<String> errMsgs;
...
getter() setter()...
}
CsvUesrRegisInfo.java(数据check)
validation check(可以自定义标签)
public class CsvUesrRegisInfo{
/**
* 用户ID
*/
@NotEmpty()
private String userId;
/**
* 用户名
*/
@NotEmpty()
private String userName;
...
getter() setter()...
}
CsvUploadOutputDto.java
public class CsvUploadOutputDto{
/**
* 用户信息
*/
private List<?> dataList;
/**
* check结果
*/
private BindingResult bindingResult ;
/**
* check结果
*/
private List<UserErrorInfo> UserErrorInfoList;
...
getter() setter()...
}
CsvUploadHelper.java
(核心处理)
public class CsvUploadHelper{
public <T> CsvUploadOutputDto uploadFile(MultipartFile uploadFile, Class<T> csvBeanClass, String bindingResultObjectName){
CsvUploadOutputDto outputDto = new CsvUploadOutputDto();
BeanPropertyBindingResult bindingResult = new BeanPropertyBindingResult(uploadFile, bindingResultObjectName);
// CSV非空check()
if (uploadFile.isEmpty()) {
...// throw new BusinessException(messages);
}
List<T> dataList = new ArrayList<>();
List<ObjectError> errorList = new ArrayList<>();
List<UserErrorInfo > UserErrorInfos = new ArrayList<>();
boolean overSizeFlag = false;
try {
//读取csv文件
CSVReader csvReader = new CSVReader(new InputStreamReader(uploadFile.getInputStream(),"MS932"));
List<String[]> csvLines = csvReader.readAll();
int lineNumber = 0;
// 最大行数
if (maxRecord < csvLines.size()) {
overSizeFlag = true;
} else {
for (String[] line : csvLines) {
lineNumber = lineNumber + 1;
Class<?> clazz = Class.forName(csvBeanClass.getName);
T csvObject = (T) clazz.newInstance;
Field fields = csvObject.getClass.getDeclaredFields();
BeanPropertyBindingResult result= new BeanPropertyBindingResult(csvObject, csvBeanClass.getName());
// check
smartValidator.validate(csvObject, result);
boolean hasErrorFlag = false;
//
if (result.hasErrors){
hasErrorFlag = true;
/**
* errMsgList.add(message)
* userErrorInfo.setErrMsgs(errMsgList);
* userErrorInfos.add(userErrorInfo);
*/
}
if (hasErrorFlag ) {
errorList.add(objectError)
} else {
// check通过
dataList.add(csvObject);
}
}
}
csvReader.close();
}catch(...){
...
}catch(...){
...
}
outputDto.setUserErrorInfoList(userErrorInfos);
outputDto.setDataList(dataList);
for(objectError error : errorList){
bindingResult.addError(error);
}
outputDto.setBindingResult (bindingResult);
retrun outputDto;
}
}
3.调用工具类
controller
outputDto = csvUploadHelper.uploadFile(uploadFile,CsvUesrRegisInfo.class,result.getObjctName());
if (outputDto.getBindingResult().hasError()) {
//返回错误数据,返回页面
} else{
//登录数据
}
总结
写这个主要目的是记录,还有很多没在这个上面写出来,但总体就是基本的csv读取和Java反射原理。
网友评论