import org.apache.poi.ss.usermodel.*;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
public class FileImportController {
@PostMapping("/import")
public ResponseEntity<?> importFile(@RequestParam("file") MultipartFile file) {
// 进行文件校验
boolean isValid = validateFile(file);
if (isValid) {
// 文件校验通过,返回JSON报文
String jsonResponse = generateJsonResponse();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
return new ResponseEntity<>(jsonResponse, headers, HttpStatus.OK);
} else {
// 文件校验不通过,返回错误数据的Excel文件
Workbook workbook = generateErrorExcel();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", "error_data.xlsx");
return new ResponseEntity<>(workbookToByteArray(workbook), headers, HttpStatus.OK);
}
}
private boolean validateFile(MultipartFile file) {
// 实现文件校验的逻辑,根据你的需求进行修改
// 如果校验通过,返回true;如果校验不通过,返回false
return true;
}
private String generateJsonResponse() {
// 生成JSON报文的逻辑,根据你的需求进行修改
return "{\"message\": \"File import successful\"}";
}
private Workbook generateErrorExcel() {
// 生成错误数据的Excel文件的逻辑,根据你的需求进行修改
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Error Data");
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("Column 1");
headerRow.createCell(1).setCellValue("Column 2");
// 添加错误数据行
Row dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("Error 1");
dataRow.createCell(1).setCellValue("Error 2");
return workbook;
}
private byte[] workbookToByteArray(Workbook workbook) {
// 将Workbook对象转换为字节数组
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
workbook.write(outputStream);
return outputStream.toByteArray();
} catch (Exception e) {
e.printStackTrace();
return new byte[0];
}
}
}
```
在上面的示例代码中,`importFile`方法接收一个`MultipartFile`对象,表示上传的文件。首先,调用`validateFile`方法进行文件校验,根据校验结果决定返回JSON报文还是错误数据的Excel文件。
如果文件校验通过,调用`generateJsonResponse`方法生成JSON报文,并使用`ResponseEntity`返回。设置响应头的`Content-Type`为`application/json`,表示返回的是JSON数据。
如果文件校验不通过,调用`generateErrorExcel`方法生成错误数据的Excel文件,并使用`ResponseEntity`返回。设置响应头的`Content-Type`为`application/octet-stream`,表示返回的是二进制文件。使用`setContentDispositionFormData`方法设置文件名为`error_data.xlsx`,这样浏览器会自动下载该文件。
注意,示例代码中的文件校验、JSON报文生成、错误数据Excel生成等方法都是示例,你需要根据你的实际需求进行修改和扩展。
Java编写一个文件导入接口,根据校验结果返回错误数据的Excel文件或正确时返回JSON报文。
最新推荐文章于 2024-07-02 00:50:11 发布
![](https://img-home.csdnimg.cn/images/20240611030827.png)