6

我想从我的 RestEasy 网络服务创建/返回一个 excel 文件,但在让它工作时遇到了一些麻烦。当我运行下面的代码(伪代码)时,出现以下错误:

org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure:找不到 MessageBodyWriter 类型的响应对象:媒体类型的 java.io.FileOutputStream:application/vnd.ms-excel

这是一些代码

@POST
@Path("/exportMyData")
@Produces("application/vnd.ms-excel")
public Response getMyData(@FormParam("id") String id) {
    HSSFWorkbook hwb = new HSSFWorkbook();
    ResponseBuilder response = null;
    try{
        List<Alert> alertList= service.getAlerts(id);


        HSSFSheet sheet =  hwb.createSheet("new sheet");

        HSSFRow rowhead=   sheet.createRow((short)0);
        rowhead.createCell((int) 0).setCellValue("ID");
        rowhead.createCell((int) 1).setCellValue("Name");
        rowhead.createCell((int) 2).setCellValue("Age");


        for(Alert alert : alertList){
            HSSFRow row=   sheet.createRow((short)1);
            row.createCell((int) 0).setCellValue(alert.getId());
            row.createCell((int) 1).setCellValue(alert.getName());
            row.createCell((int) 2).setCellValue(alert.getAge());
        }


        FileOutputStream fos = new FileOutputStream("mystream.xls");
        hwb.write(fos);
        response = Response.ok(fos);            
        response.header("Content-disposition","attachment; filename=export.xls");
    }catch(Exception e){

    }

    return response.build();
}

有任何想法吗?提前致谢/埃里克

4

3 回答 3

8

我发现如果您执行以下操作,它将起作用:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
hwb.write(baos);
response = Response.ok(baos.toByteArray());
response.header("Content-disposition", "attachment; filename=export.xls");
于 2013-10-28T19:29:50.977 回答
0

您返回 Excel 的要求不需要 RestEasy。您可以使用普通的旧 servlet 来执行此操作。

RestEasy 用于实现返回 XML、JSON 或纯文本的 REST 服务。@Produces 不支持“application/vnd.ms-excel”。

于 2012-12-24T00:52:36.890 回答
0

您需要使用 MessageBodyWriter/MessageBodyReader 接口创建自定义 mediaType。请参阅此(如何在 JAX-RS 中处理/创建新的内容类型/媒体类型?)。

于 2013-07-11T08:15:53.543 回答