package com.dy.common.webUtil; 
 | 
  
 | 
import io.swagger.v3.oas.annotations.Hidden; 
 | 
import io.swagger.v3.oas.annotations.media.Content; 
 | 
import io.swagger.v3.oas.annotations.media.Schema; 
 | 
import io.swagger.v3.oas.annotations.responses.ApiResponse; 
 | 
import io.swagger.v3.oas.annotations.responses.ApiResponses; 
 | 
import io.swagger.v3.oas.annotations.tags.Tag; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.springframework.web.bind.annotation.ControllerAdvice; 
 | 
import org.springframework.web.bind.annotation.ExceptionHandler; 
 | 
import org.springframework.web.bind.annotation.ResponseBody; 
 | 
  
 | 
/** 
 | 
 * 全局异常处理,处理在Controller中抛出的异常,在Controller之前(如Fileter)发生的错误或异常由GlErrorCtrl处理 
 | 
 * 此类是基于拦截器和实现指定接口(GlExceptionHandler和GlExceptionHandlerImpl) 
 | 
 * 另一种实现方式是基于注解切面实现(GlExceptionAspect) 
 | 
 */ 
 | 
//此类Tag注解不起作用,即不会在swagger-ui中显示,但会在每个controler的方法返回信息中显示。 
 | 
//每个controller的方法上都显示本异常API显示啰嗦,所以不启用本注解 
 | 
@Hidden //在SpringDoc中隐藏本接口API 
 | 
@Tag(name = "全局异常处理", description = "处理在Controller中抛出的异常,在Controller之前(如Fileter)发生的错误或异常由GlErrorCtrl处理") 
 | 
//在每个controler的方法返回信息中显示下面配置信息。 
 | 
@ApiResponses(@ApiResponse( 
 | 
        responseCode = ResultCodeMsg.RsCode.EXCEPTION_CODE, 
 | 
        description = "发生异常", 
 | 
        content = {@Content(mediaType = "application/json", schema = @Schema(implementation = BaseResponse.class))} 
 | 
)) 
 | 
@ControllerAdvice 
 | 
@ResponseBody 
 | 
@Slf4j 
 | 
public class GlExceptionHandler { 
 | 
  
 | 
    @ExceptionHandler 
 | 
    public BaseResponse GlExceptionHandler(GlException e){ 
 | 
        log.error("捕获到GlException:{}", e.getMsg(), e); 
 | 
        return BaseResponseUtils.buildException(e.getMsg()); 
 | 
    } 
 | 
  
 | 
    public BaseResponse exceptionHandler(Throwable t) { 
 | 
        log.error("捕获到异常:{}",t.getMessage(),t); 
 | 
        return BaseResponseUtils.buildException("在Controller中或后产生异常:" + t.getMessage()); 
 | 
    } 
 | 
} 
 |