什么叫异常处理?
- 出现了不希望出现的意外,异常处理就是遇到这种意外时准备的对策和解决方案。
- 能够抛出任意类型的Throwable对象,它是异常对象的根类。
- Java异常理论模型。终止模型和恢复模型(异常处理程序的工作时修正错误,然后重新尝试调用出问题的方法,并认为第二次能成功)。
- 异常类型。编译时异常和运行时异常(RuntimeException)。
- Throwable对象可以分为两种类型。Error用来表示编译时和系统错误;Exception是可以被抛出的基本类型。
异常处理原则和目标
- 原则:只有在你知道如何处理的情况下才捕获异常。
- 目标:把错误的代码同错误发生的地点想分离。这使你能在一段代码中专注于要完成的事情,至于如何处理错误,则放在另外一段代码中完成。
自定义异常(项目实战总结)
springboot框架中如何定义及使用demo如下:
BusinessException.java
/**
* sprintboot 统一异常定义,业务异常,只需要抛出即可,不需要再进行日志的打印,
* 系统异常,也会统一进行抛出系统异常,并打印日志,无需再进行编写异常捕获的代码
* Created by LT on 2019/4/1.
*/
@Getter
public class BusinessException extends RuntimeException{
private Integer code;
public BusinessException(ResultEnum resultEnum) {
super(resultEnum.getMessage());
this.code = resultEnum.getCode();
}
public BusinessException(Integer code, String message) {
super(message);
this.code = code;
}
}
ResultEnum.java
@Getter
public enum ResultEnum {
SUCCESS(0, "成功"),
SYSTEM_ERROR(1, "系统异常,请联系管理员"),
PARAM_ERROR(2, "参数不正确"),
OBJECT_NOT_EXIST(10, "更新的实体数据不存在")
;
private Integer code;
private String message;
ResultEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}
/**
* 功能描述: 用Handler类捕获异常,统一格式返回给前端
*
* @author LT
* @create 2019/4/1
*/
@ControllerAdvice
@Slf4j
public class BusinessExceptionHandler {
@ExceptionHandler(value = BusinessException.class)
@ResponseBody
public ResultVo handlerBusinessException(BusinessException e){
log.error("【业务异常】",e);
return ResultVo.error(e.getCode(),e.getMessage());
}
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResultVo handlerSystemException(Exception e){
// 非业务异常,则定义为系统异常
log.error("【系统异常】",e);
return ResultVo.error(ResultEnum.SYSTEM_ERROR.getCode(),ResultEnum.SYSTEM_ERROR.getMessage());
}
}
ResultVo.java
/**
* 功能描述: 统一返回描述
*
* @author LT
* @create 2019/4/1
*/
@Data
public class ResultVo<T> implements Serializable {
private static final long serialVersionUID = 8960474786737581150L;
/**
* 错误码
*/
private Integer code;
/**
*提示信息
*/
private String msg;
/**
* 具体内容
*/
private T data;
}