SpringBoot 统一异常处理
统一异常处理使用的是 @ControllerAdvice + @ExceptionHandler 来实现的。@ControllerAdvice 表示控制器通知类,@ExceptionHandler 是异常处理器,两个结合表示当出现异常的时候执行某个通知,也就是执行某个方法事件。
代码示例
ExceptionAdvice
接口返回为数据时,需要加 @ResponseBody 注解!!!
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import springbook.model.Result;
@Slf4j
@ResponseBody
@ControllerAdvice
public class ExceptionAdvice {
@ExceptionHandler
public Result handlerException(Exception e) {
log.error("发生异常,e: {}", e);
return Result.fail("内部错误");
}
@ExceptionHandler
public Result handlerException(NullPointerException e) {
log.error("发生异常,e:", e);
return Result.fail("发生空指针异常");
}
@ExceptionHandler
public Result handlerException(ArithmeticException e) {
log.error("发生异常,e:", e);
return Result.fail("发生算术异常");
}
}
Result
import lombok.Data;
import springbook.enums.ResultStatus;
@Data
<T> {
ResultStatus code;
String errMsg;
T data;
<T> Result {
<>();
result.setCode(ResultStatus.SUCCESS);
result.setData(data);
result;
}
Result {
<>();
result.setCode(ResultStatus.FAIL);
result.setErrMsg(msg);
result;
}
Result {
<>();
result.setCode(resultStatus);
result.setErrMsg(msg);
result;
}
}


