Я хочу экспортировать файл Excel в url / summaryAnalyzeResult / downloadBySummaryAnalyzeResultId, а другие URL-адреса являются интерфейсом thymeleaf, возвращают имя представления шаблона тимилиста.это мое представление Excel
@Component
public class SummaryAnalyzeResultExcelView extends AbstractXlsxView {
@Resource
private ProjectInfoService projectInfoService;
@Override
public void buildExcelDocument(Map<String, Object> model, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception {
String excelName = model.get("name").toString() + ".xlsx";
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(excelName, "utf-8"));
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");
SummaryAnalyzeResultDto summaryAnalyzeResult = (SummaryAnalyzeResultDto) model.get("summaryAnalyzeResult");
Sheet dependenciesSheet = workbook.createSheet("dependencies");
dependenciesSheet.setDefaultColumnWidth(30);
Row header = dependenciesSheet.createRow(0);
List<AnalyzeResultDto> analyzeResultDtoList = summaryAnalyzeResult.getAnalyzeResultDtoList();
if (analyzeResultDtoList == null) {
analyzeResultDtoList = Lists.newArrayList();
}
Set<String> groupAndArtifactSet = Sets.newTreeSet();
Map<Long, Map<String, String>> projectDependenciesMap = Maps.newHashMap();
for (int i = 0; i < analyzeResultDtoList.size(); i++) {
AnalyzeResultDto analyzeResultDto = analyzeResultDtoList.get(i);
Optional<ProjectInfoDto> optionalProjectInfoDto = projectInfoService.findProjectInfoById(analyzeResultDto.getProjectInfoId());
if (!optionalProjectInfoDto.isPresent()) {
continue;
}
ProjectInfoDto projectInfoDto = optionalProjectInfoDto.get();
header.createCell(i).setCellValue(projectInfoDto.getRepo());
List<DependencyDto> dependencyList = analyzeResultDto.getDependencyList();
Map<String, String> map = projectDependenciesMap.computeIfAbsent(projectInfoDto.getProjectInfoId(), key -> Maps.newHashMap());
Optional.ofNullable(dependencyList).orElse(Collections.emptyList()).forEach(dependencyDto -> {
String groupAndArtifact = dependencyDto.getGroupId() + ":" + dependencyDto.getArtifactId();
String value = map.get(groupAndArtifact);
if (StringUtils.isNotBlank(value)) {
map.put(groupAndArtifact, value + ", " + dependencyDto.getVersion());
} else {
map.put(groupAndArtifact, dependencyDto.getVersion());
}
groupAndArtifactSet.add(groupAndArtifact);
});
}
List<String> groupAndArtifactList = Lists.newArrayList(groupAndArtifactSet);
for (int i = 0; i < groupAndArtifactList.size(); i++) {
Row row = dependenciesSheet.createRow(i + 1);
String groupAndArtifact = groupAndArtifactList.get(i);
row.createCell(0).setCellValue(groupAndArtifact);
for (int j = 0; j < analyzeResultDtoList.size(); j++) {
AnalyzeResultDto analyzeResultDto = analyzeResultDtoList.get(j);
Map<String, String> map = projectDependenciesMap.get(analyzeResultDto.getProjectInfoId());
String version = map.get(groupAndArtifact);
if (StringUtils.isNotBlank(version)) {
row.createCell(j + 1).setCellValue(version);
}
}
}
}
}
Но когда я получаю доступ к url / summaryAnalyzeResult / downloadBySummaryAnalyzeResultId, браузер не запускает никаких действий загрузки, просто возвращает двоичные данные.
моя весенняя загрузочная версия - 2.0.2. RELEASE.
Что я могу сделать, чтобы это исправить?