From 3343d2905e587ea7bbfb29905400340f4eb2dc22 Mon Sep 17 00:00:00 2001 From: xiongfeng Date: Tue, 26 Aug 2025 21:52:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=BA=95=E5=B1=82=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E6=8D=95=E8=8E=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/GlobalExceptionResolver.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/main/java/cn/xf/basedemo/common/exception/GlobalExceptionResolver.java diff --git a/src/main/java/cn/xf/basedemo/common/exception/GlobalExceptionResolver.java b/src/main/java/cn/xf/basedemo/common/exception/GlobalExceptionResolver.java new file mode 100644 index 0000000..a857a81 --- /dev/null +++ b/src/main/java/cn/xf/basedemo/common/exception/GlobalExceptionResolver.java @@ -0,0 +1,53 @@ +package cn.xf.basedemo.common.exception; + +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerExceptionResolver; +import org.springframework.web.servlet.ModelAndView; + +import java.io.IOException; +import java.io.PrintWriter; + +/** + * @Description: 全局异常捕获类(所有异常(包括拦截器、Controller、视图))HandlerExceptionResolver更底层 + * @ClassName: GlobalExceptionResolver + * @Author: xiongfeng + * @Date: 2025/8/23 23:30 + * @Version: 1.0 + */ +@Slf4j +@Component +public class GlobalExceptionResolver implements HandlerExceptionResolver { + @Override + public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { + response.setContentType("application/json;charset=UTF-8"); + + try (PrintWriter writer = response.getWriter()) { + if (ex instanceof LoginException) { + response.setStatus(HttpStatus.FORBIDDEN.value()); + LoginException le = (LoginException) ex; + writer.write(new ObjectMapper().writeValueAsString( + new GenericResponse(le.getCode(), null, le.getMessage()) + )); + } else if (ex instanceof BusinessException) { + BusinessException be = (BusinessException) ex; + response.setStatus(HttpStatus.BAD_REQUEST.value()); + writer.write(new ObjectMapper().writeValueAsString( + new GenericResponse(be.getCode(), null, be.getMessage()) + )); + } else { + response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); + writer.write(new ObjectMapper().writeValueAsString( + new GenericResponse(500, null, "系统异常") + )); + } + } catch (IOException ioEx) { + log.error("写响应失败", ioEx); + } + return new ModelAndView(); + } +}