package com.doumee.config.handler; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.model.ApiResponse; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.UnauthorizedException; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import java.util.ArrayList; import java.util.List; /** * 全局异常处理 */ @Slf4j @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(BusinessException.class) public ApiResponse handleBusinessException(BusinessException e) { log.warn("BusinessException: {}", e.getMessage()); 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(HttpMessageNotReadableException.class) public ApiResponse handleHttpMessageNotReadableException(HttpMessageNotReadableException e) { log.error(e.getMessage(), e); return ApiResponse.failed(ResponseStatus.BAD_REQUEST.getCode(), "请求参数格式错误"); } @ExceptionHandler(Exception.class) public ApiResponse handleException(Exception e) { log.error(e.getMessage(), e); return ApiResponse.failed(ResponseStatus.SERVER_ERROR, e); } }