JAVA-Web后端学习10 异常处理

ちょっと春情,梦みてひらひら,私のなかのロマンティック

异常

如果后端执行代码时候出现了异常,如下所示

image

这是后端框架的默认响应数据,这种情况下前端是无法接收到任何结果的,这不是我们想要的结果

异常处理

我们需要后端不仅能够返回正常结果,也能够返回异常结果对应的信息

这就意味着我们的代码需要被修改成如下形式

@GetMapping("/empgetinfo/{Id}")
public ResultData getEmpInfoById(@PathVariable("Id") Integer Id) {
    try {
        System.out.println("Now Query is : "+Id);
        EmpData resultEmpData = empService.getEmpInfoById(Id);
        return ResultData.success(resultEmpData);
    } catch (Exception e) {
        return ResultData.error("getEmpInfoById Error!");
    }
}

@PostMapping("/empupdate")
public ResultData updateEmpInfoByRequest(@RequestBody EmpData empData) {
    try {
        empService.updateEmpInfoByRequest(empData);
        return ResultData.success();
    } catch (Exception e) {
        return ResultData.error("updateEmpInfoByRequest error!");
    }
}

但是这样的话涉及到修改的代码量过大了,所以我们需要一个全局异常处理器来进行辅助

image

全局异常处理器

全局异常处理器的代码和架构如下所示:

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler
    public ResultData handleException(Exception e) {
        log.error("Now occur Error!",e);
        return ResultData.error("Now occur Error!Please ask your administrator to solve!");
    }
}

image

@RestControllerAdvice注解表示当前类是一个全局异常处理器

该类中的方法通过@ExceptionHandler注解来捕获特定类型的异常,并返回统一格式的错误响应。

接下来我们执行代码,如果出现异常并被捕获,那么效果如下:
image

事实上我们还可以根据异常的种类捕捉特定的异常,并为此设置特定的方法用于捕获和处理

例如,如果我们插入的数据可能违反数据库的唯一约束从而引发,那么可以设置DuplicateKeyException类型异常的异常捕获方法,代码如下:

@ExceptionHandler
public ResultData handleDuplicateKeyException(DuplicateKeyException e) {
    log.error("Now occur DuplicateKeyException Error!",e);
    return ResultData.error("Now occur DuplicateKeyException Error!Please ask your administrator to solve!");
}

捕获异常方法存在优先级,对于匹配的异常类选择从下到上,从子类到父类进行匹配,由于DuplicateKeyException是Exception的子类,所以出现异常时会先匹配DuplicateKeyExceptio

posted @ 2026-03-24 00:33  tcswuzb  阅读(2)  评论(0)    收藏  举报