SpringBoot自定义静态资源映射方法
本文欢迎转载,转载请注明出处,谢谢! http://blog.csdn.net/colton_null 作者:喝酒不骑马 Colton_Null from CSDN
为什么要自定义静态资源映射?
SpringBoot默认将静态资源映射到resources目录下的public、resources、static等目录。
如果是web静态资源例如html、css、js、网站插图等静态资源,是可以放在这些目录下的。
然而,对于用户上传来的文件,放在resources目录下是有问题的。如果程序是以jar包形式运行的话,总不能每次发布打包都要把用户上传的文件也一并打进jar吧?这显然不是一个好方法。
那能不能将一些动态维护的文件,放在服务器磁盘的某个目录下(项目目录之外),并且通过SpringBoot服务进行访问呢?答案是可以的。
如何做?
只需要实现类继承WebMvcConfigurerAdapter并重写方法addResourceHandlers,将磁盘上文件存放的绝对路径映射,就可以通过访问SpringBoot服务来访问文件了。
新建一个WebAppConfig类如下
@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/myTest/**").addResourceLocations("file:D:/test/");
super.addResourceHandlers(registry);
}
}
这样就将D盘上的test目录映射到myTest路径下。
现在在D盘test目录下有一个test.jpg图片,那么通过访问http://localhost:8080/myTest/test.jpg就可以访问到该图片了
提高用户体验之自定义错误界面
如果现在我访问http://localhost:8080/myTest/test222.jpg(实际上没有这个文件),那么页面会报Whitelabel Error Page。这对普通用户来说极其不友好。
我们可以通过自定义错误页面,当用户访问错误路径时,则跳到自定义的错误界面给予友好提示,来提高用户的体验。
在WebAppConfig类中,再添加如下方法
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html");
ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html");
ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html");
container.addErrorPages(error401Page, error404Page, error500Page);
}
};
}
错误界面所在目录如下
这样,在访问错误路径时候,就可以跳转到自定义的友好界面了。