Spring Boot不提供静态内容
我无法让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 BTW)
回答:
超过一年后不复活,但先前的所有答案都遗漏了一些关键点:
@EnableWebMvc
在你的班级上将被禁用org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration
。如果你想要完全控制,那很好,但是否则,这是一个问题。- 除了已经提供的内容外,无需编写任何代码即可为静态资源添加其他位置。看着
org.springframework.boot.autoconfigure.web.ResourceProperties
从v1.3.0.RELEASE
,我看到一个字段staticLocations
,可以在配置application.properties
。这是源代码片段:
/** * Locations of static resources. Defaults to classpath:[/META-INF/resources/,
* /resources/, /static/, /public/] plus context:/ (the root of the servlet context).
*/
private String[] staticLocations = RESOURCE_LOCATIONS;
如前所述,请求URL将相对于这些位置进行解析。因此,
src/main/resources/static/index.html
当请求网址为时将投放/index.html
。从Spring 4.1开始,负责解析路径的类是org.springframework.web.servlet.resource.PathResourceResolver
。后缀模式匹配默认是启用的,这意味着对于请求
URL /index.html,Spring
将寻找与对应的处理程序/index.html
。如果目的是提供静态内容,则这是一个问题。要禁用该功能,请扩展WebMvcConfigurerAdapter
(但不要使用@EnableWebMvc
)并覆盖configurePathMatch
如下所示:
@Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {
super.configurePathMatch(configurer);
configurer.setUseSuffixPatternMatch(false);
}
恕我直言,在你的代码中减少错误的唯一方法是不尽可能编写代码。使用已经提供的内容,即使需要进行一些研究,回报也是值得的。
以上是 Spring Boot不提供静态内容 的全部内容, 来源链接: utcz.com/qa/416799.html