尝试从我的SpringBoot应用程序提供静态内容,但失败

时间:2019-10-12 10:09:11

标签: java spring-boot spring-restcontroller

我想从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年发布以来,它似乎已经很安静了。也许今天的工作方式有所不同?

4 个答案:

答案 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