Spring Boot提供静态内容:addResourceLocations与static-locations

时间:2018-07-17 12:59:35

标签: spring spring-mvc spring-boot

我有一个标准的Spring Boot应用程序,并尝试提供一些静态内容。我想将位置更改为文件系统上的特定文件夹。这些似乎是最常见的方法:

在application.yaml中设置路径

spring:
  resources:
    static-locations: "file:/here/some/path"

使用WebMvcConfigurer

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
            .addResourceHandler("/**")
            .addResourceLocations("file:/here/some/path");
    }
}

这是我的问题:第一种方法有效,第二种方法无效,我不知道为什么。有什么提示吗?

设置“ static-locations”和“ addResourceLocations”之间是否有区别?调试的起点是什么?

我想使用第二个,因为我想根据特定条件设置路径。 谢谢!

3 个答案:

答案 0 :(得分:0)

附加此注释

  

@EnableWebMvc

在您的 MvcConfig 类中。只需尝试即可解决问题。

答案 1 :(得分:0)

尝试在“ file:/ here / some / path”中添加斜杠

当您使用“ spring.resources.static-locations”时,它会自动在org.springframework.boot.autoconfigure.web.ResourceProperties#appendSlashIfNecessary为您完成

答案 2 :(得分:0)

我注意到它实际上正在与

一起使用
@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
            .addResourceHandler("/**")
            .addResourceLocations("file:/here/some/path");
    }
}

由于某种原因重定向到index.html的操作被禁用(这是一些不可预料的行为)。所以我需要手动添加它。

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry
            .addResourceHandler("/**")
            .addResourceLocations("file:/here/some/path");
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("forward:/index.html");
    }
}