为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

有只小跳蛙 2023-10-13 16:41:30
我想从我的 SpringBoot 应用程序提供静态文件。我有一个非常简单的控制器,我希望它能完成以下任务:@EnableWebMvc@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());   }}我的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 年发布以来,它似乎已经很老了。也许今天它的工作方式有所不同?
查看完整描述

5 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

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());

   }

}



查看完整回答
反对 回复 2023-10-13
?
HUH函数

TA贡献1836条经验 获得超4个赞

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


查看完整回答
反对 回复 2023-10-13
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我认为您缺少资源文件夹,您的文件夹结构应该如下所示


MyApp/

    src/

      main/

        resources/

          static/index.html

          static/img/image.png


查看完整回答
反对 回复 2023-10-13
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

静态资源通常位于 /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


查看完整回答
反对 回复 2023-10-13
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

我有一个博客应用程序,它在 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 中做了这个:


@Configuration

class 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()

    }

}


查看完整回答
反对 回复 2023-10-13
  • 5 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信