2023年11月29日发(作者:)
SpringBoot⾃定义项⽬异常----「跳转404错误页⾯」「全局异常
捕获」
异常处理在Java中是⼀种很常规的操作,在代码中我们常⽤的⽅法是try catch或者上抛异常。
但是,如果Controller发⽣异常了怎么办?业务层的异常可以在Controller捕获,Controller抛出的异常怎么捕获?SpringMvc的异常怎么捕
获?
这个时候常见的操作有两种:
1. 跳转错误页⾯,例如:找不到路径的时候跳转404,代码报错的时候跳转500等
以上是默认配置,只要是SpringBoot的项⽬都会⽣效,接下来我们来测试⼀下
1. 在static⽬录下创建error⽂件夹,以及
⾃定义错误页⾯的配置
以上是SpringBoot关于错误页⾯的默认配置,但是很多时候我们的需求⽐SpringBoot的默认配置要复杂很多,例如:404页⾯不想放在error⽂
第⼆步:创建错误页⾯的配置类,修改默认的配置
/**
* 错误页⾯配置
*
* 继承错误页⾯注册器 ErrorPageRegistrar
*/
@Configuration
public class ErrorConfig implements ErrorPageRegistrar {
@Override
public void registerErrorPages(ErrorPageRegistry registry) {
/**
* 配置错误页⾯
以上的操作实际上没有针对异常进⾏捕获,⽽是根据响应的状态码进⾏不同的处理
的,那么如果才能针对不同的异常进⾏捕获呢?这就要⽤到全局异常捕获了。
全局异常捕获
还记得⽂章开头说过的第⼆个场景吗?使⽤Result对象(⾃定义的实体类)统⼀封装异常状态码,异常信息,进⾏返回。通过全局异常捕获就可
以实现。
package ion;
public class ErrorReturnPageException extends RuntimeException {
/**
* 错误码
package ion;
import llerAdvice;
import ionHandler;
import seBody;
/**
* @ControllerAdvice 增强Controller的注解 可以实现全局异常捕获
*/
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* @ExceptionHandler 指明要捕获那个异常
* 不加@ResponseBody 会使⽤视图解析器跳转页⾯
* 形参处是Exception 简单来说就是会把捕获到的异常通过形参传⼊⽅法中
*/
@ExceptionHandler()
public String errorReturnPageException(Exception e){
// 打印错误信息
n(sage());
// 跳转500页⾯
return "forward:/";
}
/**
* 捕获 ErrorReturnResultException 异常
* 通过 @ResponseBody 注解响应数据 会以json的格式响应
*/
@ExceptionHandler()
@ResponseBody
public Result errorReturnResultException(final Exception e) {
访问 localhost:8802/testReturnPage 会跳转错误页⾯
访问 localhost:8802/testReturnResult 会返回统⼀的json数据


发布评论