自定义业务异常类

文章目录

  • 1. 创建异常处理类 CustomException.class
  • 2. 在全局异常处理类处添加对应的异常CustomException
  • 3. 在需要抛出地方使用


1. 创建异常处理类 CustomException.class

package com.itheima.reggie.common;

/**
 * 自定义业务异常类
 */
public class CustomException extends RuntimeException {
    public CustomException(String message){
        super(message);
    }
}

2. 在全局异常处理类处添加对应的异常CustomException

package com.itheima.reggie.common;


import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
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.RestController;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * 全局异常处理,底层基于代理
 */
//拦截类上加载了RestController注解,普通的加了controller
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {

    /**
     * 异常处理方法
     * @return
     */
    //参数是处理的异常的类型
    //参数是数据库插入重复异常$数据唯一性约束异常。
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
        //异常信息
        log.error(ex.getMessage());
        //Duplicate entry '1' for key 'idx_username'
        //判断异常信息有无指定关键字Duplicate entry。
        if(ex.getMessage().contains("Duplicate entry")){
            String[] split = ex.getMessage().split(" ");
            String msg = split[2] + "已存在";
            return R.error(msg);
        }

        //抛出异常会返回的方法
        return R.error("未知错误");
    }


    //参数是处理的异常的类型
    //参数是自定义的异常
    @ExceptionHandler(CustomException.class)
    public R<String> exceptionHandler(CustomException ex){
        //异常信息
        log.error(ex.getMessage());
        //抛出异常会返回的方法
        return R.error(ex.getMessage());
    }



}

3. 在需要抛出地方使用

        if(count>0){
            //说明这个分类关联了菜品,抛出业务异常


            throw new CustomException("当前分类下关联菜品,无法删除");
            

        }

你可能感兴趣的:(SpringBoot,spring,boot)