Я думаю, что мой сценарий довольно распространен. У меня есть база данных, и я хочу, чтобы мое приложение Spring MVC принимало запрос в контроллере, вызывало службу БД для получения данных и отправляло эти данные клиенту в виде файла CSV. Я использую библиотеку JavaCSV, найденную здесь, чтобы помочь в этом процессе: http://sourceforge.net/projects/javacsv/
Я нашел несколько примеров того, как люди занимаются подобными вещами, и собрал нечто похожее на то, что выглядит правильно. Однако, когда я ударил по этому методу, ничего не происходит.
Я думал, что запись данных в HttpServletResponse будет достаточным, но, видимо, мне что-то не хватает.
Здесь мой код контроллера:
@RequestMapping(value="/getFullData.html", method = RequestMethod.GET)
public void getFullData(HttpSession session, HttpServletRequest request, HttpServletResponse response) throws IOException{
List<CompositeRequirement> allRecords = compReqServ.getFullDataSet((String)session.getAttribute("currentProject"));
response.setContentType("data:text/csv;charset=utf-8");
response.setHeader("Content-Disposition","attachment; filename=\yourData.csv\"");
OutputStream resOs= response.getOutputStream();
OutputStream buffOs= new BufferedOutputStream(resOs);
OutputStreamWriter outputwriter = new OutputStreamWriter(buffOs);
CsvWriter writer = new CsvWriter(outputwriter, '\u0009');
for(int i=1;i <allRecords.size();i++){
CompositeRequirement aReq=allRecords.get(i);
writer.write(aReq.toString());
}
outputwriter.flush();
outputwriter.close();
};
Какой шаг мне здесь не хватает? В принципе, чистый эффект... ничего. Я бы подумал, что настройка заголовка и типа содержимого заставит мой браузер подобрать ответ и вызвать действие загрузки файла.