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 ApiResponse handleBusinessException (BusinessException e) { log.error(e.getMessage(), e); return ApiResponse.failed(e.getCode(), e.getMessage()); } /** * 无权限异常处理 */ @ExceptionHandler(UnauthorizedException.class) public ApiResponse handleUnauthorizedException (UnauthorizedException e) { log.error(e.getMessage(), e); return ApiResponse.failed("没有操作权限"); } /** * 参数验证未通过异常处理 */ @ExceptionHandler(MethodArgumentNotValidException.class) public ApiResponse handleMethodArgumentNotValidException (MethodArgumentNotValidException e) { log.error(e.getMessage(), e); BindingResult bindingResult = e.getBindingResult(); List 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 ApiResponse 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 ApiResponse handleException (Exception e) { log.error(e.getMessage(), e); return ApiResponse.failed(ResponseStatus.SERVER_ERROR, e); } }