猿问

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

我想从我的 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 文件位于静态文件夹中:


MyApp/

   src/

      main/

         static/index.html

         static/img/image.png

当我使用curl向http://localhost:8080发出GET请求时,我得到响应代码404作为返回,并且服务器状态No mapping for GET /。我期望返回index.html 文件。


http://localhost:8080/hello不过,使用MyBody对象作为 json 正文发送 POST 请求是可行的!


我做错了什么?


我已经在 Spring 网站上读过这篇博文,但自从该博文于 2013 年发布以来,它似乎已经很老了。也许今天它的工作方式有所不同?


有只小跳蛙
浏览 152回答 5
5回答

慕勒3428872

Spring Boot Documentation中提到了这一点,在 spring mvc 部分下您可以使用 WebMvcConfigurer,但不需要执行 @EnableWebMvc所以你应该删除@EnableWebMvc注释!//@EnableWebMvc Remove this@RestControllerpublic 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());   }}

HUH函数

您不应该在 Spring Boot 中使用 EnableWebMvc。

喵喵时光机

我认为您缺少资源文件夹,您的文件夹结构应该如下所示MyApp/    src/      main/        resources/          static/index.html          static/img/image.png

哆啦的时光机

静态资源通常位于 /src/main/resources 下以进入 maven 标准项目布局中的类路径,Spring Boot 应该为 /static (/src/main/resources/static) 下的所有文件提供服务,而无需任何应用程序配置addResourceHandler()。https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

宝慕林4294392

我有一个博客应用程序,它在 static/ 之外的文件夹中接收上传的图像。MyApp/src/  main/    resources/          static/              css/              javascript/              images/          blog/              1-blogpost/ (here are the uploaded images)              2-blogpost/ (here are the uploaded images)              (... and so on)所以我用 Spring Boot 在 Kotlin 中做了这个:@Configurationclass WebConfiguration : WebMvcConfigurer {    private val logger = loggerFactory.getLogger(WebConfiguration::class.java)    override fun addResourceHandlers(registry: ResourceHandlerRegistry) {        logger.info("####### Entering ResourceHandlers configurations #######")        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/")        registry.addResourceHandler("/blog/**").addResourceLocations("file:src/main/resources/blog/")    }    @Bean    fun restTemplate() : RestTemplate {        return RestTemplate()    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答