我想从SpringBoot应用程序中提供静态文件。我有一个非常简单的控制器,希望可以完成工作:
@EnableWebMvc
@RestController
public class MyRestController implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static")
.addResourceLocations("file:/static");
}
@PostMapping(path = "/hello")
public MyResponse hello(@RequestBody() MyBody body,
HttpServletRequest request) {
return new MyResponse("Hello " + request.getRemoteAddr());
}
}
我的index.html文件位于 static 文件夹中:
MyApp/
src/
main/
static/index.html
static/img/image.png
当我执行一个卷曲到http://localhost:8080的GET请求时,我得到响应代码404作为返回,并且服务器状态为No mapping for GET /
。
我希望返回index.html文件。
将http://localhost:8080/hello
对象作为json正文发送POST请求到MyBody
还是可以的!
我做错了什么?
我已经从Spring网站上阅读了此blogpost,但是自从该帖子于2013年发布以来,它似乎已经很安静了。也许今天的工作方式有所不同?
答案 0 :(得分:3)
Spring Boot Documentation中提到了这一点,在spring mvc部分下,您可以使用WebMvcConfigurer,但是您不需要执行@EnableWebMvc
所以您应该删除@EnableWebMvc注释!
//@EnableWebMvc Remove this
@RestController
public class MyRestController implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static")
.addResourceLocations("file:/static");
}
@PostMapping(path = "/hello")
public MyResponse hello(@RequestBody() MyBody body,
HttpServletRequest request) {
return new MyResponse("Hello " + request.getRemoteAddr());
}
}
答案 1 :(得分:1)
静态资源通常位于/ src / main / resources下,以进入maven标准项目布局中的类路径,并且Spring Boot应该为/ static(/ src / main / resources / static)下的所有文件提供服务,而不会产生任何{{ 1}}应用程序配置。
https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html
答案 2 :(得分:1)
我认为您缺少资源文件夹,您的文件夹结构应类似于
MyApp/
src/
main/
resources/
static/index.html
static/img/image.png
答案 3 :(得分:1)
您不应在Spring Boot中使用EnableWebMvc。参见the documentation