我是spring框架和REST的新手,现在尝试将REST从jersey迁移到spring boot 2.1。
控制器可以在jax-rs上正常工作,但是,我不想在Spring Boot中使用jax-rs。因此,我尝试了Spring 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调试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调试13664-[nio-9090-exec-2] o.s.w.s.handler.SimpleUrlHandlerMapping:映射到ResourceHttpRequestHandler [“ classpath:/ META-INF /
  资源/”,“类路径:/ resources /”,“类路径:/静态/”,“类路径:/公共/”,“ /”]
  2019-01-07 17:17:24.006调试13664-[nio-9090-exec-2] o.s.w.s.r.ResourceHttpRequestHandler:未找到资源
  2019-01-07 17:17:24.007调试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:为GET“ / error”分配“ ERROR”,参数= {}
  2019-01-07 17:17:24.029调试13664-[nio-9090-exec-2] swsmmaRequestMappingHandlerMapping:映射到公共org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet。 error.BasicErrorController.error(javax.servlet.http.HttpServ
  letRequest)
  2019-01-07 17:17:24.077调试13664-[nio-9090-exec-2] o.s.w.s.m.m.a.HttpEntityMethodProcessor:使用'application / json',给定[/]和受支持[applic
  ation / json,application / + json,application / json,application / + json]
  2019-01-07 17:17:24.078调试13664-[nio-9090-exec-2] o.s.w.s.m.m.a.HttpEntityMethodProcessor:编写[{timestamp = Mon Jan 07 17:17:24 SGT 2019,status = 40
  4,错误=未找到,消息=没有消息,路径= / packages / download_file / D:/xfolder/test.txt}]
  2019-01-07 17:17:24.146调试13664-[nio-9090-exec-2] o.s.web.servlet.DispatcherServlet:从“ ERROR”调度退出,状态404

最佳答案

我在这里怀疑两件事。让我澄清一下。


您正在调用的API网址是什么?
/generic/download_file/{path:[^\\.+]*}/packages/download_file/D:/xfolder/test.txt


两者看起来都不同。请参阅通用和软件包


在URL中传递文件名的更好方法是使用@RequestParam而不是@PathVariable

@GetMapping(值=“ / generic / download_file /”,使用=“ application / vnd.X-FileContent”)
    公共ResponseEntity downloadFile(@RequestParam(“ path”)字符串filePath){

08-04 16:18