2023年11月29日发(作者:)

项⽬中异常处理⽅案

异常三种处理⽅案

实际项⽬中为了让⽤户有更好的体验,代码出现异常⼀般不会直接显⽰给⽤户,⽽是⾃⼰进⾏处理后返回,⼀般有三种处理⽅案,全局异常

处理、特定异常处理和⾃定义异常处理,下⾯开始会⼀⼀介绍

全局异常处理

@ControllerAdvice

public class GlobalExceptionHandler {

//

全局异常

@ExceptionHandler(Exception.class)

@ResponseBody

public R error(Exception e){

e.printStackTrace();

return R.error().message("执⾏了⾃定义异常");

}

}

特定异常处理

@ControllerAdvice

public class GlobalExceptionHandler {

//

特定异常

@ExceptionHandler(ArithmeticException.class)

@ResponseBody

public R error(ArithmeticException e){

e.printStackTrace();

return R.error().message("除数不能为零");

}

}

⾃定义异常处理(推荐)

1.⾸先⾃定义异常:

@Data

@AllArgsConstructor //

⽣成有参数构造⽅法

@NoArgsConstructor //

⽣成⽆参数构造

public class MyException extends RuntimeException {

private Integer code;//

状态码

private String msg;//

异常信息

}

2.编写异常处理器

@ControllerAdvice

public class GlobalExceptionHandler {

//

⾃定义异常处理

@ExceptionHandler(MyException.class)

@ResponseBody

public R error(MyException e){

return R.error().code(e.getCode()).message(e.getMsg());

}

}

3.在可能出现异常处抛出⾃定义异常

贴出开发中常使⽤的异常统⼀处理类

//@ControllerAdvice

// @ResponseBody

@RestControllerAdvice // @ControllerAdvice+@ResponseBody

public class GlobalExceptionHandler {

private Logger logger = LoggerFactory.getLogger(getClass());

//

特定异常

@ExceptionHandler(ArithmeticException.class)

public R error(ArithmeticException e){

logger.error(e.getMessage(),e);

return R.error().message("除数不能为零");

}

@ExceptionHandler(NoHandlerFoundException.class)

public R handlerNoFoundException(Exception e) {

logger.error(e.getMessage(),e);

return R.error().code(404).message("路径不存在,请检查路径是否正确");

}

@ExceptionHandler(DuplicateKeyException.class)

public R handleDuplicateKeyException(DuplicateKeyException e){

logger.error(e.getMessage(), e);

return R.error().message("数据库中已存在该记录");

}

@ExceptionHandler(AuthorizationException.class)

public R handleAuthorizationException(AuthorizationException e){

logger.error(e.getMessage(), e);

return R.error().message("没有权限,请联系管理员授权");

}

@ExceptionHandler(NullPointerException.class)

public R handleAuthorizationException(NullPointerException e){

logger.error(e.getMessage(), e);

return R.error().message("空指针异常");

}

//

⾃定义异常处理

@ExceptionHandler(MyException.class)

public R error(MyException e){

logger.error(e.getMessage());

return R.error().code(e.getCode()).message(e.getMsg());

}

//

全局异常

@ExceptionHandler(Exception.class)

public R error(Exception e){

logger.error(e.getMessage(),e);

return R.error().message("出现异常");

}

}