跳到主要内容

Springboot捕获业务异常

原文:https://javajgs.com/archives/25256

Springboot版本: 2.7.1

添加异常处理器

exception/GlobalExceptionHandler.java
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public String handleException(Exception e) {
return "System error";
}
}

@ControllerAdvice注解表示我们定义的是一个控制器增强类,当其他任何控制器发生异常且异常类型符合@ExceptionHandler注解中指定的异常类时,原请求将会被拦截到这个我们自定义的控制器方法中。

在该方法中,我们可以拿到异常信息,于是便可以自定义该如何处理异常,是返回一个我们自定义的模版错误页面,还是返回JSON数据,这将都由我们根据实际应用场景而自己决定。并且我们还可以自定义异常类处理特殊情况。

另外,@ExceptionHandler注解只有一个value参数,为指定的异常类。@ControllerAdvice注解查看源码参数发现我们还可以指定需要拦截的控制器所在的包路径。

测试触发异常

controller/DevController.java
@GetMapping("/raise")
public String makeError() {
int i = 1 / 0;
return "haha";
}