diff --git a/snowy-web-app/src/main/java/vip/xiaonuo/core/handler/GlobalErrorViewController.java b/snowy-web-app/src/main/java/vip/xiaonuo/core/handler/GlobalErrorViewController.java index 1cfd2517..82d3a287 100644 --- a/snowy-web-app/src/main/java/vip/xiaonuo/core/handler/GlobalErrorViewController.java +++ b/snowy-web-app/src/main/java/vip/xiaonuo/core/handler/GlobalErrorViewController.java @@ -19,8 +19,11 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import vip.xiaonuo.common.pojo.CommonResult; +import vip.xiaonuo.common.util.CommonResponseUtil; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; /** * 全局异常页面处理器,覆盖默认的Whitelabel Error Page @@ -39,7 +42,7 @@ public class GlobalErrorViewController { * @date 2022/2/11 16:11 **/ @RequestMapping("/errorView") - public CommonResult globalError(HttpServletRequest request) { + public void globalError(HttpServletRequest request, HttpServletResponse response) throws IOException { CommonResult commonResult = new CommonResult<>(404, "路径不存在", null); Object model = request.getAttribute("model"); if(ObjectUtil.isNotEmpty(model)) { @@ -57,6 +60,6 @@ public class GlobalErrorViewController { exception.printStackTrace(); } log.error(">>> {}", commonResult.getMsg()); - return commonResult; + CommonResponseUtil.renderError(response, commonResult.getMsg()); } } diff --git a/snowy-web-app/src/main/java/vip/xiaonuo/core/handler/GlobalExceptionUtil.java b/snowy-web-app/src/main/java/vip/xiaonuo/core/handler/GlobalExceptionUtil.java index 7d21fe35..7a7466d1 100644 --- a/snowy-web-app/src/main/java/vip/xiaonuo/core/handler/GlobalExceptionUtil.java +++ b/snowy-web-app/src/main/java/vip/xiaonuo/core/handler/GlobalExceptionUtil.java @@ -15,11 +15,13 @@ package vip.xiaonuo.core.handler; import cn.dev33.satoken.exception.SaTokenException; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.http.Header; import cn.hutool.http.HttpStatus; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.exceptions.PersistenceException; import org.mybatis.spring.MyBatisSystemException; import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.validation.BindException; import org.springframework.validation.BindingResult; @@ -33,10 +35,13 @@ import org.springframework.web.multipart.support.MissingServletRequestPartExcept import vip.xiaonuo.auth.core.util.AuthExceptionUtil; import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.pojo.CommonResult; +import vip.xiaonuo.common.util.CommonResponseUtil; import vip.xiaonuo.common.util.CommonServletUtil; +import javax.servlet.http.HttpServletRequest; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; +import java.io.IOException; import java.util.List; import java.util.Set; @@ -112,9 +117,22 @@ public class GlobalExceptionUtil { //文件上传错误特殊提示 commonResult = CommonResult.error("请选择要上传的文件并检查文件参数名称是否正确"); } else if (e instanceof SaTokenException) { - - // 如果是SaToken相关异常,则由AuthExceptionUtil处理 - return AuthExceptionUtil.getCommonResult(e); + CommonResult saTokenCommonResult = AuthExceptionUtil.getCommonResult(e); + HttpServletRequest request = CommonServletUtil.getRequest(); + String accept = request.getHeader(Header.ACCEPT.getValue()); + // 此时异常可能是SaToken的过滤器异常,如果是流下载等接口,需要直接渲染异常信息 + if(ObjectUtil.isNotEmpty(accept) && accept.equals(MediaType.APPLICATION_OCTET_STREAM_VALUE)) { + try { + CommonResponseUtil.renderError(CommonServletUtil.getResponse(), e.getMessage()); + return null; + } catch (IOException ioException) { + ioException.printStackTrace(); + commonResult = CommonResult.error("服务器异常"); + } + } else { + // 如果是SaToken相关异常,则由AuthExceptionUtil处理 + return saTokenCommonResult; + } } else if(e instanceof MyBatisSystemException) { // 如果是MyBatisSystemException @@ -128,7 +146,7 @@ public class GlobalExceptionUtil { e.printStackTrace(); commonResult = CommonResult.error("数据操作异常"); } - } else { + }else { e.printStackTrace(); commonResult = CommonResult.error("数据操作异常"); }