如:权限不足、数据唯一异常、数据不能为空异常、义务异常等。 这些异常如果不经过处理会对前端开发人员和使用者造成不便,因此我们就需要统一处理他们。

    源码位于:源码位于: 模块中的 exception 包中

    异常实体

    自定义异常

    1、通用异常
    1. @Getter
    2. public class BadRequestException extends RuntimeException{
    3. private Integer status = BAD_REQUEST.value();
    4. public BadRequestException(String msg){
    5. super(msg);
    6. }
    7. public BadRequestException(HttpStatus status,String msg){
    8. super(msg);
    9. this.status = status.value();
    10. }
    2、实体相关异常

    (1) 实体不存在: EntityNotFoundException

    (2) 实体已存在:EntityExistException

    1. import org.springframework.util.StringUtils;
    2. /**
    3. * @author Zheng Jie
    4. * @date 2018-11-23
    5. */
    6. public class EntityExistException extends RuntimeException {
    7. public EntityExistException(Class clazz, String field, String val) {
    8. super(EntityExistException.generateMessage(clazz.getSimpleName(), field, val));
    9. private static String generateMessage(String entity, String field, String val) {
    10. return StringUtils.capitalize(entity)
    11. + " with " + field + " "+ val + " existed";
    12. }
    13. }

    新增用户的时候用户名是唯一的,可判断用户是否存在,抛出异常

    全局异常拦截

    使用全局异常处理器 @RestControllerAdvice 处理请求发送的异常

    • @ExceptionHandler:通过@ExceptionHandler的 value 属性可过滤拦截的条件

    具体使用

    1. // 通用异常
    2. throw new BadRequestException("发生了异常");
    3. // 通用异常,使用自定义状态码
    4. throw new BadRequestException(HttpStatus.OK, "发送了异常");
    5. // 实体存在异常
    6. throw new EntityExistException(User.class, "email", "elunez@qq.com");
    7. // 实体不存在异常