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

Mar*_*k D 3 resources static spring-boot

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

@Configuration
public class ApiVersionConfiguration extends WebMvcConfigurationSupport {

    @Override
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        return new ApiVersionRequestMappingHandlerMapping(readDateToVersionMap());
    }}
Run Code Online (Sandbox Code Playgroud)

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

但是它似乎也禁用了@EnableAutoConfiguration bean,因此现在不提供静态资源(如本问题所述,是否可以扩展WebMvcConfigurationSupport并使用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());
    }}
Run Code Online (Sandbox Code Playgroud)

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

No mapping found for HTTP request with URI [/index.html] in DispatcherServlet with name 'dispatcherServlet' 
Run Code Online (Sandbox Code Playgroud)

..如果我禁用这个类,那么这些资源可以通过@EnableAutoConfiguration magic来提供.

我一直在玩各种选项来提供静态内容,扩展了WebMvcConfigurationSupport,但迄今为止没有成功.

有任何想法吗?

Dav*_*dez 5

我遇到了同样的问题,想出了一个适合我的解决方案.如果您只是想让资源正常运行而不必担心重复,您可以这样做:

@Configuration
public class StaticResourcesConfig extends WebMvcAutoConfigurationAdapter {

}
Run Code Online (Sandbox Code Playgroud)

然后

@Configuration
@EnableWebMvc
@Import(StaticResourcesConfig.class)
public class WebConfig extends WebMvcConfigurationSupport {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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