一,错误页面
如图所有,这两种错误提示在springboot开发的应有程序中都很常见,第一种是html请求,第二种是json格式的请求。
在SpringBoot中,默认错误请求控制器是BasicErrorController。
@RequestMapping注解的意思是,如果配置文件没有配置server.error.path,则默认使用error
这里主要看我圈出来的这两个方法,第一个方法是处理html请求的错误,第二种是处理json格式请求的错误。
了解完基础知识之后,就可以开始准备我们专属的错误页面的。
从SpringBoot官方文档里边可以知道,默认的错误页面是在templates下的一个erroe.html文件,如果我们替换掉默认的,只需要再这个目录下新建一个error.html即可。
测试代码:
可以看到,我们新创的error.html已经替换掉springboot默认的错误页面了。除了这种全部错误都用一个页面来展示的方法,我们也可以用错误码来区分错误,让不同的错误跳转到不同的HTML。
测试代码:
其他的错误码页面也是类似,要注意,文件的目录是放在templates/error/xxx.html ,同时,我们也可以看出来,错误页面的响应也是有优先级的,具体的请看总结。
接下来,是动态的错误页面。一般页面上都需要把错误信息给打印出来。
注意,这里配置文件要改动一下,不然页面上是获取不到错误信息的。
小总结:基本上,springboot错误页面的配置已经讲解完了,各种错误页面的优先级是 : 动态 > 静态 > error.html
二,统一异常处理
这里主要涉及到2个注解:@ExceptionHandler和@ControllerAdvice
@ExceptionHandler注解,此注解注解到类的方法上,当此注解里定义的异常抛出时,此方法会被执行。
如果@ExceptionHandler所在的类是@Controller,则此方法只作用在此类。
如果@ExceptionHandler所在的类带有@ControllerAdvice注解,则此方法会作用在全局。
也就是说,局部的异常处理 = @Controller/@RestController + @ExceptionHandler,全局的异常处理 = @ControllerAdvice + @ExceptionHandler
局部异常处理 测试代码:
可以看到,两个不同的controller,同样的异常,不同的错误输出。
全局异常处理-代码测试:
可以看到,两个controller都可以对同一个异常做出同样的处理。
三,总结
介绍了springboot默认处理错误页面的几种方法和介绍了怎么做一个异常统一处理。在项目里,配置了异常统一处理之后,不管哪里抛出的异常,我们只需在统一处理的方法上修改我们的逻辑即可,减轻我们开发和维护的难度,毕竟方法多了之后异常零散分散在不同的方法里,不好管理。