SpringBoot 2.0 WebMvcConfigurerA
2018-09-26 本文已影响0人
双流小二郎
SpringBoot 2.0使用Spring 5,Spring 5弃用了WebMvcConfigurerAdapter。
1. WebMvcConfigurerAdapter过时
项目中自定义静态文件目录时,按照原来方法需要继承WebMvcConfigurerAdapter类,后面发现IDEA提示该类已经过时。
搜索之后大家都建议使用WebMvcConfigurationSupport来代替。
2. 继承WebMvcConfigurationSupport后自动配置不生效问题,静态文件无法访问
按照第一步修改继承对象之后,又做了很多开发,测试突然发现网页没法访问了。困扰许久,步步回退代码后发现是因为这个修改,手动哭泣。
自动配置的静态资源路径:
- classpath:/META/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public/
自动配置类WebMvcAutoConfiguration 代码中有个注释@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
@AutoConfigureOrder(-2147483638)
@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {
public static final String DEFAULT_PREFIX = "";
public static final String DEFAULT_SUFFIX = "";
private static final String[] SERVLET_LOCATIONS = new String[]{"/"};
public WebMvcAutoConfiguration() {
}
@ConditionalOnMissingBean
这个注解的意思是在项目类路径中缺少WebMvcConfigurationSupport类型的bean时该自动配置类才会生效
一阵Google之后,改为实现WebMvcConfigurer接口。
public class AppConfig implements WebMvcConfigurer {
}
3. 最终静态文件的处理
最终写在了application.properties文件中
demoProj.webapp.path=/home/appuser/demoProj/webapp/
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,\
classpath:/static/,classpath:/public/,file:${demoProj.webapp.path}