我们在实际工作中碰到最常见的问题,肯定是空指针问题,我们在项目中经常会因为空指针的问题导致项目直接500了,这样对用户体验不是友好,系统层面的错误,用户不应该直接感知到,即使为500的错误,也可以给用户提示一个类似服务器开小差的友好提示等,来保证客户端能够收到友好的提示,这里我们主要就是介绍SpringBoot中的全局异常的处理。
这里我们还以继续以之前的项目为例,我们在Controller层里手动抛出一个空指针异常,如下:
然后我们访问结果如下:
这里我们就建立一个专门的异常处理类来统一处理,如下:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = NullPointerException.class)
@ResponseBody
public Object nullPointerExceptionHandler(HttpServletRequest request, Exception e){
return "发现空指针啦...";
}
}
当然我们还可以捕获其他我们经常遇到的异常来进行对应的处理,也可以捕获我们自定义的异常,或者最后捕获下我们没有考虑到的异常情况
就算我们进行了全局的异常捕获,但是如果我们一不小心输错了地址进行访问,结果如下:
所以我们还需要来处理一下404的情况,这里我们可以来自定义一个404的页面,这里我们碰到404情况我们将其请求转发给了之前的 /hello ,如下
我们当然也是可以将其直接指定一个html的错误页面等等,如下:
注意: 上述自定义一个404的错误页面方式是基于SpringBoot2之后的用法,如果我们使用的SpringBoot2之前,那么又该怎么做呢?很简单,用EmbeddedServletContainerCustomizer
替代 WebServerFactoryCustomizer
就可以了,如下:
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return (container -> {
ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.do");
container.addErrorPages( error404Page);
});
}
静态资源访问
静态资源:js, css, html, 图片,音视频等。
静态资源路径:是指系统可以直接访问的路径,且路径下的所有文件均可被用户直接读取。
其实上述上述我们已经介绍过了,我们在解决碰到404情况是,直接将其定位置 /static/html/index.html 页面,其实在static文件夹下的文件是可以直接进行访问的,
Spring Boot 中默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:
- /static
- /public
- /resources
- /META-INF/resources