package com.doumee.config.handler; 
 | 
  
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.model.ApiResponse; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.fileupload.FileUploadBase; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.shiro.authz.UnauthorizedException; 
 | 
import org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException; 
 | 
import org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException; 
 | 
import org.springframework.http.HttpStatus; 
 | 
import org.springframework.validation.BindingResult; 
 | 
import org.springframework.validation.FieldError; 
 | 
import org.springframework.web.bind.MethodArgumentNotValidException; 
 | 
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.RestControllerAdvice; 
 | 
import org.springframework.web.method.HandlerMethod; 
 | 
import org.springframework.web.multipart.MaxUploadSizeExceededException; 
 | 
import org.springframework.web.multipart.MultipartException; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * 全局异常处理 
 | 
 * @author Eva.Caesar Liu 
 | 
 * @date 2023/02/14 11:14 
 | 
 */ 
 | 
@Slf4j 
 | 
@RestControllerAdvice 
 | 
//@ControllerAdvice 
 | 
public class GlobalExceptionHandler { 
 | 
  
 | 
    /** 
 | 
     * 业务异常处理 
 | 
     */ 
 | 
    @ExceptionHandler(BusinessException.class) 
 | 
    public <T> ApiResponse<T> handleBusinessException (BusinessException e) { 
 | 
        log.error(e.getMessage(), e); 
 | 
        return ApiResponse.failed(e.getCode(), e.getMessage()); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 无权限异常处理 
 | 
     */ 
 | 
    @ExceptionHandler(UnauthorizedException.class) 
 | 
    public <T> ApiResponse<T> handleUnauthorizedException (UnauthorizedException e) { 
 | 
        log.error(e.getMessage(), e); 
 | 
        return ApiResponse.failed("没有操作权限"); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 参数验证未通过异常处理 
 | 
     */ 
 | 
    @ExceptionHandler(MethodArgumentNotValidException.class) 
 | 
    public <T> ApiResponse<T> handleMethodArgumentNotValidException (MethodArgumentNotValidException e) { 
 | 
        log.error(e.getMessage(), e); 
 | 
        BindingResult bindingResult = e.getBindingResult(); 
 | 
        List<String> errors = new ArrayList<>(); 
 | 
        for(FieldError fieldError : bindingResult.getFieldErrors()){ 
 | 
            errors.add(fieldError.getDefaultMessage()); 
 | 
        } 
 | 
        return ApiResponse.failed(ResponseStatus.BAD_REQUEST.getCode(), StringUtils.join(errors)); 
 | 
    } 
 | 
  
 | 
//    @ExceptionHandler(MultipartException.class) 
 | 
//    @ResponseBody 
 | 
/*    public <T> ApiResponse<T> handleMultipartException(MultipartException ex) { 
 | 
//        log.error(ex.getCause().getCause().getClass().getPackage()+ex.getCause().getCause().getClass().getName()); 
 | 
//        return ApiResponse.failed(ResponseStatus.SERVER_ERROR.getCode(), "对不起,系统文件上传请限制在200MB以内"); 
 | 
    }*/ 
 | 
    /** 
 | 
     * 其它异常处理 
 | 
     */ 
 | 
    @ExceptionHandler(Exception.class) 
 | 
    public <T> ApiResponse<T> handleException (Exception e) { 
 | 
        log.error(e.getMessage(), e); 
 | 
        return ApiResponse.failed(ResponseStatus.SERVER_ERROR, e); 
 | 
    } 
 | 
  
 | 
} 
 |