Как исправить «ресурс не найден» при попытке загрузить файл в REST API весенней загрузки? - PullRequest
0 голосов
/ 07 января 2019

Я новичок в Spring Framework и REST, и сейчас пытаюсь перенести REST из трикотажа в Spring boot 2.1 Контроллер отлично работает с jax-rs, однако я не хочу использовать jax-rs при весенней загрузке. Итак, я попытался весной Mvc, и я получаю ошибку «ресурс не найден». Пожалуйста, я бы очень признателен за любую помощь.

Я пробовал это

@GetMapping(value ="/generic/download_file/{path:[^\\.+]*}", consumes ="application/vnd.X-FileContent")
    public ResponseEntity<?> downloadFile(@PathVariable("path") String filePath){

        String actualFilePath = "";

        try {

            actualFilePath = filePath.replaceAll("\\/", "\\\\");

            File file = new File(actualFilePath);

            if (file.exists()) {

                return ResponseEntity.ok().header("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"").body(file);

            } else {

                return errorHandling.errorResponseFactory("1.0.0", Thread.currentThread().getStackTrace()[1], "",
                        RecommendedSolution.UseValidDirectoryPath, "File not exist.");

            }

        } catch (Exception ex) {

            ActionLog.writeLog("program_library_v510", "1.0.0", "Exception occur during gettig generic package file",
                    ActionLogType.DebugLog);
            ActionLog.writeLog("program_library_v510", "1.0.0", "Exception occur during getting generic package file",
                    ActionLogType.ErrorLog);

            return errorHandling.errorResponseFactory("1.0.0", Thread.currentThread().getStackTrace()[1], "",
                    RecommendedSolution.UnexpectedErrorMsg, "");
        }
    }

2019-01-07 17: 17: 23.930 ИНФОРМАЦИЯ 13664 --- [nio-9090-exec-2] o.s.web.servlet.DispatcherServlet: завершена инициализация за 10 мс 2019-01-07 17: 17: 23.947 DEBUG 13664 --- [nio-9090-exec-2] o.s.web.servlet.DispatcherServlet: GET "/packages/download_file/D:/xfolder/test.txt", параметр Rs = {} 2019-01-07 17: 17: 24.002 DEBUG 13664 --- [nio-9090-exec-2] o.s.w.s.handler.SimpleUrlHandlerMapping: сопоставлено с ResourceHttpRequestHandler ["classpath: / META-INF / resources / "," classpath: / resources / "," classpath: / static / "," classpath: / public / "," / "] 2019-01-07 17: 17: 24.006 DEBUG 13664 --- [nio-9090-exec-2] o.s.w.s.r.ResourceHttpRequestHandler: ресурс не найден 2019-01-07 17: 17: 24.007 DEBUG 13664 --- [nio-9090-exec-2] o.s.web.servlet.DispatcherServlet: завершено 404 NOT_FOUND 2019-01-07 17: 17: 24.015 DEBUG 13664 --- [nio-9090-exec-2] o.s.web.servlet.DispatcherServlet: отправка "ERROR" для GET "/ error", параметры = {} 2019-01-07 17: 17: 24.029 DEBUG 13664 --- [nio-9090-exec-2] swsmmaRequestMappingHandlerMapping: сопоставлено с общедоступным org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.webserv. error.BasicErrorController.error (javax.servlet.http.HttpServ letRequest) 2019-01-07 17: 17: 24.077 DEBUG 13664 --- [nio-9090-exec-2] o.s.w.s.m.m.a.HttpEntityMethodProcessor: Использование 'application / json', задано [ / ] и поддерживается [application ation / json, приложение / + json, приложение / json, приложение / + json] 2019-01-07 17: 17: 24.078 DEBUG 13664 --- [nio-9090-exec-2] o.s.w.s.m.m.a.HttpEntityMethodProcessor: Запись [{timestamp = Mon Jan 07 17:17:24 SGT 2019, статус = 40 4, ошибка = не найдено, сообщение = сообщение недоступно, путь = / packages / download_file / D: /xfolder/test.txt}] 2019-01-07 17: 17: 24.146 DEBUG 13664 --- [nio-9090-exec-2] o.s.web.servlet.DispatcherServlet: выход из отправки «ОШИБКА», состояние 404

1 Ответ

0 голосов
/ 07 января 2019

Я подозреваю две вещи здесь. Позвольте мне уточнить это.

  1. Какой URL-адрес API вы вызываете? /generic/download_file/{path:[^\\.+]*} или /packages/download_file/D:/xfolder/test.txt

оба выглядят по-разному. Пожалуйста, смотрите универсальные и пакеты

  1. Лучший способ передать имена файлов в URL-адресе - использовать @RequestParam вместо @PathVariable

    @ GetMapping (значение = "/ generic / download_file /", потребляет = "application / vnd.X-FileContent") public ResponseEntity downloadFile (@RequestParam ("path") String filePath) {

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