static - 扩展 Spring Boot WebMvcConfigurationSupport 时出现静态资源问题

标签 static spring-boot resources

我扩展了 WebMvcConfigurationSupport 来实现 api 版本控制方案 - 即

@Configuration
public class ApiVersionConfiguration extends WebMvcConfigurationSupport {

    @Override
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        return new ApiVersionRequestMappingHandlerMapping(readDateToVersionMap());
    }}

这使用自定义处理程序映射来版本化 api,并且工作得非常好。

但是,它似乎也禁用了 @EnableAutoConfiguration bean,以便现在不提供静态资源(如本问题 Is it possible to extend WebMvcConfigurationSupport and use WebMvcAutoConfiguration? 中所述)。

好吧,我想,让我们向上面的类添加一个资源处理程序 - 即

@Configuration
public class ApiVersionConfiguration extends WebMvcConfigurationSupport {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("classpath:/public/").addResourceLocations("/");
    }

    @Override
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        return new ApiVersionRequestMappingHandlerMapping(readDateToVersionMap());
    }}

但是..这不起作用..?当我浏览到/index.html 时出现此错误:

No mapping found for HTTP request with URI [/index.html] in DispatcherServlet with name 'dispatcherServlet' 

..如果我禁用此类,那么 @EnableAutoConfiguration 魔法就能很好地提供这些资源。

我一直在尝试使用各种选项来提供扩展了 WebMvcConfigurationSupport 的静态内容,但到目前为止没有成功。

有什么想法吗?

最佳答案

我遇到了同样的问题,并想出了一个适合我的解决方案。如果您只是想让资源发挥作用​​而不用担心重复,您可以这样做:

@Configuration
public class StaticResourcesConfig extends WebMvcAutoConfigurationAdapter {

}

然后

@Configuration
@EnableWebMvc
@Import(StaticResourcesConfig.class)
public class WebConfig extends WebMvcConfigurationSupport {
    ...
}

只要您不在 Controller 中映射 /** ,这就会成功使用 Spring Boot 默认值来提供静态资源。

关于static - 扩展 Spring Boot WebMvcConfigurationSupport 时出现静态资源问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33804379/

相关文章:

java - 单例模式实现中的类变量和方法

java - 如何在 Spring Boot 中为多个数据库编写 Controller 类?

grails - 在resources.groovy中引用外部Java类

c++ - C++ 和 gcc 中的线程局部静态

c - 如何将 static 与 typedef 一起使用?

c++ - 访问静态函数变量是否比访问全局变量慢?

java - Keycloak - 是否可以在领域之间共享一组公共(public)用户?

java - 如何构建一个同时暴露rest和soap服务的Spring Boot jar

iphone - 在 iPhone 应用程序内共享资源的最佳方式

c# - ResX 文件和额外的应用层