#java #tomcat
Вопрос:
У меня есть относительно простое требование Java/Tomcat, но я не могу понять, как его реализовать.
У меня есть запрос HTTPS POST на определенный URL-адрес сервера, вызовите его /myserver/somecontroller.do
.
Метод контроллера правильно возвращает документ Excel с типом mime application/vnd.ms-excel
.
Все это прекрасно работает. Проблема в том, что ответ загружается на клиентский компьютер с именем somecontroller.do
, а не с чем-то, что понимает Excel, например myspreadsheet.xls
.
Поэтому, когда пользователь нажимает на файл, чтобы открыть его, он получает уродливое сообщение об ошибке вместо ожидаемой электронной таблицы, а я получаю предупреждение о неполадках в своем почтовом ящике.
Они могли бы переименовать файл, но оптимальным решением будет правильное системное имя файла.
Как я могу изменить параметры HttpServletResponse, чтобы он понимал, что отправляет документ, вызываемый myspreadsheet.xls
вместо somecontroller.do
?
Некоторый очищенный пример кода:
// Returns a spreadsheet, but it's called "somethingelse.do" instead of
// "somethingelse.xls"
@RequestMapping(value="/something/somthingelse.do", method=RequestMethod.POST)
public String doSomething(@ModelAttribute ReportModel reportModel, BindingResult bindResult,HttpServletResponse response,Model model) throws Exception{
Workbook reportObj = ReportService.generateExcel(ReportService.getReportData(reportModel.getReportParameters()));
response.setContentType("application/vnd.ms-excel");
OutputStream out = response.getOutputStream();
HSSFWorkbook workbook = (HSSFWorkbook) reportObj;
workbook.write(out);
out.flush();
return SomeViewMapping.VIEW_SOMETHING.getViewName();
}
Ответ №1:
Вам нужен еще один заголовок. Что-то вроде:
response.setHeader("Content-Disposition", "attachment; filename=myspreadsheet.xls");
Комментарии:
1. Спасибо. Всегда приятно получить некоторую помощь от StackOverflow.