编程思想_异常处理

什么叫异常处理?

  • 出现了不希望出现的意外,异常处理就是遇到这种意外时准备的对策和解决方案。
  • 能够抛出任意类型的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 implements Serializable {

    private static final long serialVersionUID = 8960474786737581150L;

    /**
     * 错误码
     */
    private Integer code;
    /**
     *提示信息
     */
    private String msg;
    /**
     * 具体内容
     */
    private T data;

}

你可能感兴趣的:(JAVA工程师)