JAVA-Web后端学习10 异常处理
ちょっと春情,梦みてひらひら,私のなかのロマンティック
异常
如果后端执行代码时候出现了异常,如下所示

这是后端框架的默认响应数据,这种情况下前端是无法接收到任何结果的,这不是我们想要的结果
异常处理
我们需要后端不仅能够返回正常结果,也能够返回异常结果对应的信息
这就意味着我们的代码需要被修改成如下形式
@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!");
}
}
但是这样的话涉及到修改的代码量过大了,所以我们需要一个全局异常处理器来进行辅助

全局异常处理器
全局异常处理器的代码和架构如下所示:
@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!");
}
}

@RestControllerAdvice注解表示当前类是一个全局异常处理器
该类中的方法通过@ExceptionHandler注解来捕获特定类型的异常,并返回统一格式的错误响应。
接下来我们执行代码,如果出现异常并被捕获,那么效果如下:

事实上我们还可以根据异常的种类捕捉特定的异常,并为此设置特定的方法用于捕获和处理
例如,如果我们插入的数据可能违反数据库的唯一约束从而引发,那么可以设置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

浙公网安备 33010602011771号