Exception异常处理

1. 两种异常处理机制

1.1 使用 throw 关键字手动抛出异常

使用throw关键字抛出异常,代码会的显得简单明了

如下图所示
在这里插入图片描述

1.2 使用 try-catch 捕获异常

使用try-catch进行捕获异常,往往会使代码变得更加笼统,层层包裹

如下图所示
在这里插入图片描述

2. 自定义异常处理

我们可以使用我们自定义的异常处理,用于解决我们所设定的异常


import lombok.Data;

/**
 * 自定义异常
 */
@Data
public class XueChengPlusException extends RuntimeException{

    private String errMessage;

    public XueChengPlusException() {
    }

    public XueChengPlusException(String message) {
        this.errMessage = message;
    }

    public static void cast(String message){
        throw new XueChengPlusException(message);
    }

    public static void cast(CommonError error){
        throw new XueChengPlusException(error.getErrMessage());
    }
}

3. 异常返回前端信息model

由于我们往往需要前后端联调的时候,寻要获取异常处理的信息,使其显示在前端页面,显示给用户

import java.io.Serializable;

/**
 * 错误响应参数包装,异常信息模型
 */

public class RestErrorResponse implements Serializable {

    private final String errMessage;

    public RestErrorResponse(String errMessage) {
        this.errMessage = errMessage;
    }

    public String getErrMessage() {
        return errMessage;
    }
}

4. 通用异常信息

从上文来看,我们自定义异常继承的是RuntimeException,但如果是出现其他类型的异常,例如Exception…,我们需要定义一个通用异常处理

/**
 * @description 通用错误信息
 */
public enum CommonError {

	UNKOWN_ERROR("执行过程异常,请重试。"),
	PARAMS_ERROR("非法参数"),
	OBJECT_NULL("对象为空"),
	QUERY_NULL("查询结果为空"),
	REQUEST_NULL("请求参数为空");

	private String errMessage;

	public String getErrMessage() {
		return errMessage;
	}

	private CommonError( String errMessage) {
		this.errMessage = errMessage;
	}

}

5. 全局异常处理

这是一个异常处理机器,用于处理各种异常,然后返回给前端一个异常信息

import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 针对自定义异常进行处理
     * @param e
     * @return
     */
    @ExceptionHandler(XueChengPlusException.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public RestErrorResponse customException(XueChengPlusException e){

        //记录异常
        log.error("系统异常{}",e.getErrMessage(),e);
        //解析出异常信息
        String errMessage = e.getErrMessage();
        RestErrorResponse restErrorResponse = new RestErrorResponse(errMessage);
        return restErrorResponse;
    }


    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    public RestErrorResponse customException(Exception e){

        //记录异常
        log.error("系统异常{}",e.getMessage(),e);
        //解析出异常信息
        RestErrorResponse restErrorResponse = new RestErrorResponse(CommonError.UNKOWN_ERROR.getErrMessage());
        return restErrorResponse;
    }
}

相关推荐

  1. 「PHP系列」PHP Exception(异常处理)

    2024-03-10 10:38:02       16 阅读
  2. 异常Exception

    2024-03-10 10:38:02       9 阅读
  3. *Python中的异常处理:try-except-else-finally详解

    2024-03-10 10:38:02       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 10:38:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 10:38:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 10:38:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 10:38:02       20 阅读

热门阅读

  1. Angular开发的NativeScript项目中,如何返回上一页?

    2024-03-10 10:38:02       17 阅读
  2. Oracle 数据库sysaux表空间

    2024-03-10 10:38:02       20 阅读
  3. Wireshark

    2024-03-10 10:38:02       24 阅读
  4. 23种设计模式详细介绍

    2024-03-10 10:38:02       18 阅读
  5. 记录tensorflow cpu版本安装

    2024-03-10 10:38:02       22 阅读
  6. 【React】react的生命周期

    2024-03-10 10:38:02       20 阅读
  7. 使用React Context和Hooks在React Native中共享蓝牙数据

    2024-03-10 10:38:02       15 阅读
  8. 基于 llvm 3.4 的C++重构工具

    2024-03-10 10:38:02       18 阅读
  9. Spring Boot的单元测试及示例代码

    2024-03-10 10:38:02       19 阅读
  10. c++ primer中文版第五版作业第十一章

    2024-03-10 10:38:02       26 阅读
  11. 09 string的实现

    2024-03-10 10:38:02       19 阅读
  12. 重拾C++之菜鸟刷算法第10篇---二叉树(下)

    2024-03-10 10:38:02       21 阅读