| | |
| | | import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; |
| | | import com.google.common.util.concurrent.UncheckedExecutionException; |
| | | import jakarta.servlet.http.HttpServletRequest; |
| | | import jakarta.servlet.http.HttpServletResponse; |
| | | import jakarta.validation.ConstraintViolation; |
| | | import jakarta.validation.ConstraintViolationException; |
| | | import jakarta.validation.ValidationException; |
| | |
| | | import org.springframework.web.bind.MissingServletRequestParameterException; |
| | | import org.springframework.web.bind.annotation.ExceptionHandler; |
| | | import org.springframework.web.bind.annotation.RestControllerAdvice; |
| | | import org.springframework.web.context.request.async.AsyncRequestNotUsableException; |
| | | import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; |
| | | import org.springframework.web.multipart.MaxUploadSizeExceededException; |
| | | import org.springframework.web.servlet.NoHandlerFoundException; |
| | |
| | | /** |
| | | * 全局异常处理器,将 Exception 翻译成 CommonResult + 对应的异常编号 |
| | | * |
| | | * @author 芋道源码 |
| | | * @author 超级管理员 |
| | | */ |
| | | @RestControllerAdvice |
| | | @AllArgsConstructor |
| | |
| | | |
| | | private final ApiErrorLogCommonApi apiErrorLogApi; |
| | | |
| | | /** 客户端已断开时响应不可再写;注入 HttpServletResponse 使 Spring MVC 直接结束处理。 */ |
| | | @ExceptionHandler(AsyncRequestNotUsableException.class) |
| | | public void asyncRequestNotUsableExceptionHandler(HttpServletRequest request, |
| | | HttpServletResponse response, |
| | | AsyncRequestNotUsableException ex) { |
| | | log.debug("[asyncRequestNotUsableExceptionHandler][客户端已断开 uri={}]", request.getRequestURI()); |
| | | } |
| | | |
| | | /** |
| | | * 处理所有异常,主要是提供给 Filter 使用 |
| | | * 因为 Filter 不走 SpringMVC 的流程,但是我们又需要兜底处理异常,所以这里提供一个全量的异常处理过程,保持逻辑统一。 |