当我继承WebMvcConfiger类配置映射文件路径后一直无法访问到文件(报404)
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
.allowedMethods("*")
.allowedOrigins("*")
.allowedHeaders("*");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
/**
* 配置资源映射
* 意思是:如果访问的资源路径是以“/images/”开头的,
* 就给我映射到本机的“E:/images/”这个文件夹内,去找你要的资源
* 注意:E:/images/ 后面的 “/”一定要带上
*/
String os = System.getProperty("os.name");
if(os.toLowerCase().startsWith("win")){
registry.addResourceHandler("/images/**").addResourceLocations("file:C:/personal/data/ycj/file/");
}else if(os.toLowerCase().startsWith("lin")){
registry.addResourceHandler("/images/**").addResourceLocations("file:/opt/img/");
}
}
}
经过不断的面向百度编程后无果,突发奇想打断点观察类加载情况,继而发现此类并未被加载
到底是什么问题导致的呢?
此时突然发现项目中还有一个继承自WebMvcConfigurerAdapter的类
@Configuration
public class AliFastJsonConfig extends WebMvcConfigurationSupport {
/**
* 使用阿里 fastjson 作为JSON MessageConverter
* @param converters
*/
@Override
public void configureMessageConverters(List> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setSerializerFeatures(
// 保留map空的字段
SerializerFeature.WriteMapNullValue,
// 将String类型的null转成""
SerializerFeature.WriteNullStringAsEmpty,
// 将Number类型的null转成0
SerializerFeature.WriteNullNumberAsZero,
// 将List类型的null转成[]
SerializerFeature.WriteNullListAsEmpty,
// 将Boolean类型的null转成false
SerializerFeature.WriteNullBooleanAsFalse,
// 避免循环引用
SerializerFeature.DisableCircularReferenceDetect,
//全局修改日期格式,默认为false
SerializerFeature.WriteDateUseDateFormat)
;
converter.setFastJsonConfig(config);
converter.setDefaultCharset(Charset.forName("UTF-8"));
List mediaTypeList = new ArrayList<>();
// 解决中文乱码问题,相当于在Controller上的@RequestMapping中加了个属性produces = "application/json"
mediaTypeList.add(MediaType.APPLICATION_JSON);
converter.setSupportedMediaTypes(mediaTypeList);
converters.add(converter);
}
}
经过百度发现继承WebMvcConfigurationSupport和实现WebMvcConfigurer 是配置WebMvc的两大方法,但如果各自继承或实现后同一个项目中只会有一个生效(具体的生效顺序待研究,但在我项目中只生效了继承WebMvcConfigurationSupport的配置类)
解决方法: 只保留其中一个配置类并将所有的配置放入其中。