之前发过通过继承WebMvcConfigurationSupport来访问静态资源的文章——img标签访问静态资源,代码如下
@Configuration
public class LocalPathWebMvcConfigurer extends WebMvcConfigurationSupport {
/**
* 在springboot项目中,允许浏览器访问指定本地文件
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/img/**").addResourceLocations("file:///D:/exerciting/java/mall-picture/");
super.addResourceHandlers(registry);
}
}
这个方法是可行的,但会带来一个小问题。
像这些本身就要访问静态资源的,它们一般是实现了WebMvcConfigurer,而不是继承WebMvcConfigurationSupport。
当我们用上面代码中的方法访问静态资源后,会发现你不能继续访问swagger-ui.html了,所以改进的做法是将自己要访问的静态资源也用实现WebMvcConfigurer中addResourceHandlers方法的方式重写,代码如下:
@Configuration
public class BaaJoyMallWebMvcConfigurer implements WebMvcConfigurer {
@Autowired
private TokenToMallUserMethodArgumentResolver tokenToMallUserMethodArgumentResolver;
/**
* 在springboot项目中,允许浏览器访问指定本地文件,最好用实现WebMvcConfigurer的方法而不是继承WebMvcConfigurationSupport的方法重写
* 因为如果像swagger-ui这种自带静态资源的,可能会因此访问不到
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/goods-img/**")
.addResourceLocations("file:///D:/exerciting/java/baajoy-mall-springboot/src/main/resources/goods-img/");
registry.addResourceHandler("/upload/**")
.addResourceLocations("file:///D:/exerciting/java/baajoy-mall-springboot/src/main/resources/upload/");
}
}
当然两种方法都是可以的,至于有没有其他方法,还没有太多了解。