Когда я пытаюсь использовать standard servlet approach
, в моем браузере появляется всплывающее окно с вопросом, открыть ли мне файл .xls или сохранить его.
Я попробовал точно такой же код через JAX-RS
и всплывающее окно браузера не будет отображаться каким-либо образом. Кто-нибудь сталкивался с этим?
JAX-RS способ, который не будет отображать всплывающее окно:
@Path("excellaTest")
public class ExcellaTestResource {
@Context
private UriInfo context;
@Context
private HttpServletResponse response;
@Context
private HttpServletRequest request;
public ExcellaTestResource() {
}
@Path("horizontalProcess")
@GET
//@Produces("application/vnd.ms-excel")
@Produces("application/vnd.ms-excel")
public void getProcessHorizontally() {
try {
URL templateFileUrl = this.getClass().getResource("myExcelTemplate.xls");
String templateFilePath = URLDecoder.decode(templateFileUrl.getPath(), "UTF-8");
String outputFileDir = "MasatoExcelHorizontalOutput";
ReportProcessor reportProcessor = new ReportProcessor();
ReportBook outputBook = new ReportBook(templateFilePath, outputFileDir, ExcelExporter.FORMAT_TYPE);
ReportSheet outputSheet = new ReportSheet("myExcelSheet");
outputBook.addReportSheet(outputSheet);
reportProcessor.addReportBookExporter(new OutputStreamExporter(response));
reportProcessor.process(outputBook);
System.out.println("done!!");
}
catch(Exception e) {
System.out.println(e);
}
return;
}
}//end class
class OutputStreamExporter extends ReportBookExporter {
private HttpServletResponse response;
public OutputStreamExporter(HttpServletResponse response) {
this.response = response;
}
//ReportProcessor output()
//This method is call when ReportProcessor process() is invoked.
//The Workbook from POI API can be used to write to stream
@Override
public void output(Workbook book, BookData bookdata, ConvertConfiguration configuration) throws ExportException {
//TODO write to stream
try {
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=masatoExample.xls");
book.write(response.getOutputStream());
response.getOutputStream().close();
System.out.println("booya!!");
}
catch(Exception e) {
System.out.println(e);
}
}
}//end class