springboot APi接口 将查询的数据List<Map<String,Object>>生以csv返回
时间: 2024-12-12 10:32:18 浏览: 11
java 读取csv 并转为Map<String,Object>
在Spring Boot API接口中,如果你需要将查询到的包含`List<Map<String, Object>>`数据结构转换为CSV并返回给客户端,你可以这样做:
首先,你需要引入一些依赖,如`spring-boot-starter-web`和`com.opencsv:opencsv`,用于处理HTTP请求和CSV文件操作。
1. 添加相关依赖到`pom.xml`:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.4</version> <!-- 最新版本 -->
</dependency>
```
2. 创建一个API控制器类,例如`CsvExportController`:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.opencsv.CSVWriter;
import java.io.IOException;
import java.io.StringWriter;
import java.util.List;
import java.util.stream.Collectors;
public class CsvExportController {
@Autowired
private YourService yourService; // 替换为你实际的服务
@GetMapping("/export/csv")
public ResponseEntity<String> exportToCsv(@RequestParam(value = "data", required = false) MultipartFile file,
@RequestParam("query") String query) throws IOException {
if (file.isEmpty()) { // 如果没有上传文件,则通过API直接获取数据
List<Map<String, Object>> dataList = yourService.queryData(query); // 获取数据列表
String csvContent = convertListToCsv(dataList);
return ResponseEntity.ok().contentType(MediaType.TEXT_CSV).body(csvContent);
} else { // 如果有文件上传,可以保存CSV内容到文件后下载
// ...处理文件上传操作...
// 保存CSV到文件
// 返回下载链接或文件内容
}
}
private String convertListToCsv(List<Map<String, Object>> dataList) throws IOException {
StringWriter stringWriter = new StringWriter();
CSVWriter writer = new CSVWriter(stringWriter);
writer.writeNext(dataList.get(0).keySet().toArray(new String[0])); // 写入表头
dataList.forEach(record -> writer.writeNext(record.values().toArray()));
writer.close();
return stringWriter.toString();
}
}
```
在这个例子中,`YourService`是一个假设的服务接口,负责从数据库或其他源获取`Map<String, Object>`形式的数据。`convertListToCsv`方法将`List<Map<String, Object>>`转换成CSV字符串。如果请求中有文件上传,你可以选择将其内容写入到本地文件,然后提供下载链接。
阅读全文