4.基于SpringBoot3实现全局异常处理与统一返回封装

1. 全局异常处理

config目录下GlobalExceptionHandler.java,代码如下

@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    
    

    @ExceptionHandler(value = MissingServletRequestParameterException.class)
    @ResponseBody
    public ResponseVo MissingRequestParameter(MissingServletRequestParameterException e) {
    
    
        return ResponseVo.error(e.getParameterName() + "不能为空");
    }

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public ResponseVo exceptionHandler(Exception e) {
    
    
        log.error("系统繁忙,请稍后重试: {}", e.getMessage());
        e.printStackTrace();
        return ResponseVo.error("系统繁忙,请稍后重试");
    }
}
2. 统一返回封装

config目录下UnitedResponseAdvice.java,代码如下

@RestControllerAdvice
@Slf4j
public class UnitedResponseAdvice implements ResponseBodyAdvice<Object> {
    
    

    @Override
    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
    
    
        return true;
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
    
    
        if (body != null && !(body instanceof ResponseVo) && !(body instanceof byte[])) {
    
    
            // 放行Swagger相关
            if (body instanceof TreeMap && ((TreeMap)body).containsKey("oauth2RedirectUrl")) {
    
    
                return body;
            }
            return ResponseVo.message(ResponseCode.SUCCESS.val(), ResponseCode.SUCCESS.des(), body);
        }
        return body;
    }
}

欢迎关注公众号算法小生

猜你喜欢

转载自blog.csdn.net/SJshenjian/article/details/133768074
今日推荐