我扩展了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 magic可以很好地提供这些资源。
我一直在玩各种选项来提供扩展WebMvcConfigurationSupport的静态内容,但迄今为止没有成功。
有什么想法吗?
答案 0 :(得分:5)
我遇到了同样的问题,想出了一个适合我的解决方案。如果你只想让资源运作而不必担心重复,你可以这样做:
@Configuration
public class StaticResourcesConfig extends WebMvcAutoConfigurationAdapter {
}
然后
@Configuration
@EnableWebMvc
@Import(StaticResourcesConfig.class)
public class WebConfig extends WebMvcConfigurationSupport {
...
}
只要您不在控制器中映射/**
,就可以成功使用Spring Boot默认值来提供静态资源。