如何通过实现流式处理输出从 rest 服务创建大型数据集并下载为 CSV 文件



我在数据库中有 20k 条记录,我需要通过从 rest 服务实现 StreamingOutput 将所有数据导出到 CSV 文件中。 我不知道如何实现流输出以下载csv文件。

请帮助我..

提前🙏🙏致谢

您必须从数据库中读取记录,将每一行转换为CSV,并使用如下所示的内容来使用StreamingOutput

package de.demo.services;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
import java.io.*;
@Path( "/demo" )
public class DemoService
{
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/api")
public Response getCsv() {
StreamingOutput stream = new StreamingOutput() {
public void write(OutputStream os) throws ... {
Writer writer = new BufferedWriter(new OutputStreamWriter(os));
writer.write( /* CSV data */ );            
writer.flush();
}
};
return Response.ok(stream).build();
}
}

请注意不要一次从数据库中读取所有 20k 行,而是根据 JDBC 语句的方法setFetchSize游标读取结果。

在 Maven 中使用以下依赖项:

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.23.1</version>
</dependency>

泽西岛的第2.23.1版不是您可以获得的最新版本。

我使用相同的方法,就像你建议的那样,但控制不仅仅进入 StreamingOutput 实现。这是代码。

@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/allEmployeeReport")
public Response exportAllEmployee()
{ 
StreamingOutput stream = new  
StreamingOutput() { 
public void write(OutputStream os)
throws IOException, Web...{
Writer writer = new    
BufferedWriter(new
OutputStreamWriter(os));
for(Employee employee : 
repository.findAll()){
writer.write(employee.getFName());
writer.write(",");
writer.write(employee.getLName());
writer.write(",");
writer.write(employee.getEmail()); 
writer.write(",");
writer.write(employee.getMobile());
writer.write(",");
writer.write(employee.getDOB());
writer.write("n");
} 
writer.flush();
writer.close();
}; 
return Response.ok(stream).build(); 
}

相关内容

  • 没有找到相关文章

最新更新