首页 文章

在Resteasy中创建excel

提问于
浏览
6

我想从我的RestEasy webservice创建/返回一个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();
}

有任何想法吗?在此先感谢/埃里克

3 回答

  • 7

    您需要使用MessageBodyWriter / MessageBodyReader接口创建自定义mediaType . 请参考这个(How to handle/create new content-type/MediaType in JAX-RS?) .

  • 0

    我发现,如果你这样做,它会起作用:

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    hwb.write(baos);
    response = Response.ok(baos.toByteArray());
    response.header("Content-disposition", "attachment; filename=export.xls");
    
  • 0

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

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

相关问题