我有下面的类尝试以Excel电子表格的形式返回一些数据。我遇到了错误
找不到针对媒体类型=应用程序/八位字节流,类型=类org.apache.poi.xssf.usermodel.XSSFWorkbook的MessageBodyWriter
我也试过了@Produces("application/vnd.ms-excel"),但是遇到了类似的错误。有人对我如何获得它以返回电子表格有建议吗?上一次我收到与此类似的错误消息(表示无法为arraylist找到消息正文编写器),我只是将其包装在通用实体中。这次不起作用了。
@PermitAll
@Path("uploadWorkbook")
public class ExcelUploadResource {
@Context
ResourceContext resourceContext;
@Inject
JobService jobService;
@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response list() {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Job definitions");
int rowNum = 0;
for(Job job : jobService.list()){
Row row = sheet.createRow(rowNum++);
int cellNum = 0;
for(String field : job.toList()){
Cell cell = row.createCell(cellNum++);
cell.setCellValue(field);
}
}
GenericEntity<XSSFWorkbook> entity = new GenericEntity<XSSFWorkbook>(workbook) {};
ResponseBuilder response = Response.ok(entity);
response.header("Content-Disposition",
"attachment; filename=jobs.xls");
return response.build();
}
}
Run Code Online (Sandbox Code Playgroud)
您不能只使用数据类型的任意对象application/octet-stream。您首先需要了解的是对象如何序列化。这是通过使用MessageBodyWriters 完成的。您可以在JAX-RS Entity Providers中了解有关它们的更多信息。
作者的工作方式是将实体和响应流传递给它。编写者应采用实体并将实体的内容写入响应流。我们将根据返回的实体类型和预期的媒体类型来查找作者application/octet-stream。
错误的意思是没有作家来处理您的转换XSSFWorkbook。在谈论时application/octet-stream,您主要是在处理二进制文件。XSSFWorkbook不是二进制文件。当有工作application/octet-stream,你会大多与工作byte[],File,InputStream,和StreamingOutput实体类型。因此,如果要使用application/octet-stream,则需要将实体更改为这些类型之一。
我从未使用过Apache POI,但是只是通过快速教程,看来您可能要在这种情况下使用StreamingOutput,您可以使用XSSFWorkbook#write(OutputStream)方法将工作簿写入。StreamingOutput
public Response getExcelFile() {
XSSFWorkbook workbook = new XSSFWorkbook();
...
StreamingOutput output = new StreamingOutput() {
@Override
public void write(OutputStream out)
throws IOException, WebApplicationException {
workbook.write(out);
out.flush();
}
};
return Response.ok(output)
.header(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=jobs.xls")
.build();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1515 次 |
| 最近记录: |