我无法让我的 Spring-boot 项目提供静态内容。
我在 --- 下放置了一个名为 static
src/main/resources
文件夹。在其中我有一个名为 images
的文件夹。当我打包应用程序并运行它时,它找不到我放在该文件夹中的图像。
我尝试将静态文件放入 public
、 resources
和 META-INF/resources
但没有任何效果。
如果我 jar -tvf app.jar 我可以看到文件在右侧文件夹的 jar 中:例如 /static/images/head.png
但调用: http://localhost:8080/images/head.png
,我得到的只是 404
任何想法为什么 spring-boot 没有找到这个? (我正在使用 1.1.4 顺便说一句)
原文由 Vinicius Carvalho 发布,翻译遵循 CC BY-SA 4.0 许可协议
时隔一年多不复活,但之前所有的答案都漏掉了一些关键点:
@EnableWebMvc
你的班级将禁用org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration
。如果您想要完全控制,那很好,否则,这是一个问题。除了已经提供的内容之外,无需编写任何代码来为静态资源添加另一个位置。查看来自 v1.3.0.RELEASE 的
org.springframework.boot.autoconfigure.web.ResourceProperties
,我看到一个字段staticLocations
可以在application.properties
中配置。这是源代码的一个片段:如前所述,请求 URL 将 相 对于这些位置进行解析。因此
src/main/resources/static/index.html
将在请求 URL 为/index.html
时提供服务。从 Spring 4.1 开始,负责解析路径的类是org.springframework.web.servlet.resource.PathResourceResolver
。默认情况下启用后缀模式匹配,这意味着对于请求 URL
/index.html
,Spring 将寻找与/index.html
对应的处理程序。如果打算提供静态内容,这是一个问题。要禁用它,请扩展WebMvcConfigurerAdapter
(但不要使用@EnableWebMvc
)并覆盖configurePathMatch
,如下所示:恕我直言,在代码中减少错误的唯一方法是尽可能不编写代码。使用已经提供的东西,即使需要一些研究,回报也是值得的。
2021 年 7 月编辑:
WebMvcConfigurerAdapter
自 Spring 5 起已被弃用。实现WebMvcConfigurer
并使用@Configuration
--- 进行注释。