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;
}
}
欢迎关注公众号算法小生