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数据