Как экспортировать файл Excel в весеннюю загрузку? - PullRequest
0 голосов
/ 22 мая 2018

Я хочу экспортировать файл 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.

Что я могу сделать, чтобы это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...