我是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){