Как я могу переименовать ответ из http-запроса?

#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.