code2全局异常处理

93 阅读1分钟

image.png 1common创建LeadException 作为项目自己的异常

#### 通用异常--动态参数 参数过滤 请求示例 请求参数 响应参数 响应码 headers 响应时间
package com.heima.common.exception;

import com.heima.common.enums.AppHttpCodeEnum;
import lombok.Getter;

/**
 * 自定义异常
 */
@Getter
public class LeadException extends RuntimeException {

    private AppHttpCodeEnum enums;

    public LeadException(String message) {
        super(message);
    }

    public LeadException(String message, Throwable cause) {
        super(message, cause);
    }

    public LeadException(AppHttpCodeEnum enums, String message) {
        super(message);
        this.enums = enums;
    }

    public LeadException(AppHttpCodeEnum enums) {
        this.enums = enums;
    }
}

2common模块中新建类ExceptionCatch @RestControllerAdvice 控制器增强注解

@ExceptionHandler 异常处理器 与上面注解一起使用,可以拦截指定的异常信息

package com.heima.common.exception; 
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.enums.AppHttpCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 统一异常控制器增强
 */
@RestControllerAdvice   返回数据
@Slf4j
public class ExceptionCatch {

    @ExceptionHandler(runtimeException.class)  // 捕获异常类型
    返回ResponseResult  参数传参用
    public ResponseResult exception(runtimeException e) {
        // 记录日志
        log.error(e.getMessage());
        // 返回通用异常信息  传code message
        return ResponseResult.error(AppHttpCodeEnum.SERVER_ERROR);
        return ResponseResult.error("code":0);
    }
    
    /**
     * 自定义异常处理
     * @param leadException
     * @return
     */
    @ExceptionHandler(LeadException.class)
    public ResponseResult leadExceptionHandler(LeadException leadException) {
        leadException.printStackTrace();

        if(StringUtils.isNotBlank(leadException.getMessage())){
            log.error("catch exception:{}", leadException.getMessage());
            return ResponseResult.error(leadException.getEnums(),leadException.getMessage());

        }else{
            log.error("catch exception:{}", leadException.getEnums().getErrorMessage());
            return ResponseResult.error(leadException.getEnums());
        }
    }
}

3#### 集成到admin项目中使用

package com.heima.admin.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * 初始化配置
 */
@Configuration
@ComponentScan({"com.heima.common.exception"})
public class InitConfig {
}

4contoller

  if(CollectionUtils.isEmpty(adChannelIPage.getRecords())){
            throw new LeadException(AppHttpCodeEnum.DATA_NOT_EXIST);
        }