Spring Boot配置ResourceHandlerRegistry静态资源404(file URL路径截断)求助
解决Spring Boot ResourceHandlerRegistry静态资源404问题
这个问题的核心原因是你配置的文件资源路径末尾缺少了斜杠,导致URL相对路径解析时出错。
问题分析
当你使用file:///home/alex作为资源位置时,这个URL会被解析为指向一个名为alex的文件(而非目录)。所以当FileUrlResource.createRelative尝试拼接相对路径blah/1234.txt时,URL解析规则会把基础URL的最后一段alex替换成目标路径,最终生成错误的file:/home/blah/1234.txt,自然找不到对应的资源。
解决方案
只需要在资源路径的末尾添加斜杠,明确告诉Spring这是一个目录路径即可。有几种可行的配置方式:
方式1:直接在URL末尾加斜杠
registry.addResourceHandler("/static/**") .addResourceLocations("file:///home/alex/"); // 注意末尾的斜杠
方式2:使用文件系统路径格式(同样加斜杠)
registry.addResourceHandler("/static/**") .addResourceLocations("file:/home/alex/");
方式3:通过Path生成带斜杠的URI(更可靠,避免手动加斜杠出错)
import java.nio.file.Paths; // ... registry.addResourceHandler("/static/**") .addResourceLocations(Paths.get("/home/alex").toUri().toString());
这种方式会自动生成带末尾斜杠的URI(比如file:///home/alex/),确保相对路径解析逻辑正确。
验证效果
配置完成后,当你请求localhost:8080/static/blah/1234.txt时,Spring会正确解析为/home/alex/blah/1234.txt,就能正常访问到目标静态资源了。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

