SpringBoot 對靜態資源的映射規則
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
} else {
Integer cachePeriod = this.resourceProperties.getCachePeriod();
if (!registry.hasMappingForPattern("/webjars/**")) {
this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(cachePeriod));
}
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern(staticPathPattern)) {
this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(this.resourceProperties.getStaticLocations()).setCachePeriod(cachePeriod));
}
}
}
規則一:/webjars/** 映射爲 classpath:/META-INF/resources/webjars/
規則二:/** 映射爲:
- /
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public/
SpringBoot 對 SpringMVC 的默認配置:
- Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans.自動配置視圖解析器
// 定製視圖解析器
@Bean
public ViewResolver my() {
return new MyViewResolver();
}
private static class MyViewResolver implements ViewResolver {
@Override
public View resolveViewName(String s, Locale locale) throws Exception {
return null;
}
}
- Support for serving static resources, including support for WebJars (covered later in this document)).
- Automatic registration of Converter, GenericConverter, and Formatter beans.
Converter:轉換器,類型轉換
Formatter:格式化器 - Support for HttpMessageConverters.
HttpMessageConverter:SpringMVC 用來轉換 Http 請求和響應的 - Automatic registration of MessageCodesResolver.
定義錯誤代碼生成規則 - Static index.html support.
- Custom Favicon support.
- Automatic use of a ConfigurableWebBindingInitializer bean.
擴展 SpringMVC
If you want to keep Spring Boot MVC features and you want to add additional MVC configuration (interceptors, formatters, view controllers, and other features), you can add your own @Configuration class of type WebMvcConfigurer but without @EnableWebMvc. If you wish to provide custom instances of RequestMappingHandlerMapping, RequestMappingHandlerAdapter, or ExceptionHandlerExceptionResolver, you can declare a WebMvcRegistrationsAdapter instance to provide such components.
@Configuration
public class Config extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry viewControllerRegistry) {
viewControllerRegistry.addViewController("/haha").setViewName("haha");
}
}
If you want to take complete control of Spring MVC, you can add your own @Configuration annotated with @EnableWebMvc.