在java rest服务中发送excel作为下载响应时要设置的编码类型是什么

在java rest服务中发送excel作为下载响应时要设置的编码类型是什么,java,rest,export-to-excel,Java,Rest,Export To Excel,我试图发送excel文件作为对ajax请求的响应,以便在JavaREST服务中下载。但是编码类型似乎不正确。 这是我的java类 @Path("/ExcelExport") public class ExportExcel { @POST @Consumes(MediaType.TEXT_PLAIN) @Produces("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") @Pa

我试图发送excel文件作为对ajax请求的响应,以便在JavaREST服务中下载。但是编码类型似乎不正确。 这是我的java类

@Path("/ExcelExport")
public class ExportExcel {
    @POST
    @Consumes(MediaType.TEXT_PLAIN)
    @Produces("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    @Path("/export")
    public Response getBrowserLanguage(String meterdata) throws JSONException
    {
         JSONObject output = new JSONObject(meterdata);
         JSONArray gridArray = output.getJSONArray("finalJsonObj");
         JSONObject gridRow=null;
         ResponseBuilder response=null;
        try {
         final HSSFWorkbook workbook = new HSSFWorkbook();
         HSSFSheet sheet = workbook.createSheet("Sheet1"); 
         String colNames[]=null;
         Row row =null;
         Cell cell = null;
         int cellnum = 0;
         if(gridArray.length()>0){           
             row = sheet.createRow(0);
             gridRow=(JSONObject)gridArray.get(0);
             colNames=JSONObject.getNames(gridRow);
             for (String colName: colNames) {
                 cell = row.createCell(cellnum++);
                 cell.setCellValue(colName);
             }
             for (int i=0;i<gridArray.length();i++) {
                 row = sheet.createRow(i+1);
                 cellnum = 0;
                 gridRow=(JSONObject)gridArray.get(i);
                 for (String colName: colNames) {
                     cell = row.createCell(cellnum++);
                     cell.setCellValue(gridRow.getString(colName));
                 }
             }
         }
         response= Response.ok(new StreamingOutput() {
            @Override
            public void write(OutputStream outputStream) throws IOException,
                    WebApplicationException {
                workbook.write(outputStream);
            }
        },"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");     
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return response.header("Content-Disposition","attachment; filename=export.xls").build();
    }
}
excel文件打开,但编码似乎不同,因此它显示了一些垃圾文本


提前感谢

以下是excel的有效MIME类型

对于BIFF.xls文件

application/vnd.ms-excel
资料来源:

适用于Excel2007及以上.xlsx文件

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

从您的评论中,我了解到您希望用户下载excel文件,而不是将其内联显示。您可以在Servlet中添加以下代码

response.setContentType("application/vnd.ms-excel");  
response.setHeader("Content-disposition","attachment; filename=someFile.xls");  

应用程序/vnd.ms excel
?是的,我试过了。回答是正确的。但是我如何打开它来请求用户下载呢。。?请帮忙。。提前感谢是的,我已经将application/vnd.ms-excel设置为内容类型,因为我的机器中安装了excel 2003。但我仍然收到这样一个错误:“您试图打开的文件的格式不同”,ang给出了一些垃圾文本,如下所示:ë½ë½ë½;ï½ï½ï½ï½ïï½ïï½ïï½ïïï½ïïï½ïïïïïï。“这是正确的方法吗?”温斯顿桑克我怀疑的是,它甚至在被发送之前就被弄乱了。你能确认你写的方式是正确的吗?@Ahsan谢谢。我已经通过在发送响应之前将其写入服务器本身的一个文件来确认了这一点。在通过回复发送之前,它是完美的。我想编码格式或我试图用javascript访问响应的方式很麻烦(但由于它是一个Java rest服务,通过ajax方式调用了方法POST,因此我在客户端得到的响应是二进制的。我尝试了所有可能的方法让浏览器提示下载。但是下载的excel中充满了垃圾数据。看起来二进制响应是完美的。但是我用来打开下载的方法我猜下面的le是不正确的:window.location='data:application/vnd.ms excel',+xmlhttp.responseText;
response.setContentType("application/vnd.ms-excel");  
response.setHeader("Content-disposition","attachment; filename=someFile.xls");