@Slf4j @RestControllerAdvice public class GlobalExceptionHandler {
@ExceptionHandler(BusinessException.class) public Result<Void> handleBusinessException(BusinessException e) { log.warn("业务异常: {}", e.getMessage()); return Result.fail(e.getCode(), e.getMessage()); }
@ExceptionHandler(MethodArgumentNotValidException.class) public Result<Void> handleMethodArgumentNotValid(MethodArgumentNotValidException e) { String message = e.getBindingResult().getFieldErrors().stream() .map(error -> String.format("%s%s", error.getField(), error.getDefaultMessage())) .collect(Collectors.joining(", ")); log.warn("参数校验失败: {}", message); return Result.fail(ErrorCode.PARAM_ERROR.getCode(), message); }
@ExceptionHandler(ConstraintViolationException.class) public Result<Void> handleConstraintViolation(ConstraintViolationException e) { String message = e.getConstraintViolations().stream() .map(violation -> violation.getPropertyPath() + violation.getMessage()) .collect(Collectors.joining(", ")); log.warn("参数校验失败: {}", message); return Result.fail(ErrorCode.PARAM_ERROR.getCode(), message); }
@ExceptionHandler(BindException.class) public Result<Void> handleBindException(BindException e) { String message = e.getBindingResult().getFieldErrors().stream() .map(error -> error.getField() + error.getDefaultMessage()) .collect(Collectors.joining(", ")); return Result.fail(ErrorCode.PARAM_ERROR.getCode(), message); }
@ExceptionHandler(HttpRequestMethodNotSupportedException.class) public Result<Void> handleMethodNotSupported(HttpRequestMethodNotSupportedException e) { return Result.fail(405, "请求方法不支持: " + e.getMethod()); }
@ExceptionHandler(NoHandlerFoundException.class) public Result<Void> handleNoHandlerFound(NoHandlerFoundException e) { return Result.fail(404, "资源不存在: " + e.getRequestURL()); }
@ExceptionHandler(MissingServletRequestParameterException.class) public Result<Void> handleMissingParam(MissingServletRequestParameterException e) { return Result.fail(ErrorCode.PARAM_ERROR.getCode(), "缺少参数: " + e.getParameterName()); }
@ExceptionHandler(MethodArgumentTypeMismatchException.class) public Result<Void> handleTypeMismatch(MethodArgumentTypeMismatchException e) { return Result.fail(ErrorCode.PARAM_ERROR.getCode(), String.format("参数%s类型错误,应为%s", e.getName(), e.getRequiredType().getSimpleName())); }
@ExceptionHandler(Exception.class) public Result<Void> handleException(Exception e, HttpServletRequest request) { log.error("系统异常, URI: {}, 错误: {}", request.getRequestURI(), e.getMessage(), e); return Result.fail(ErrorCode.SYSTEM_ERROR.getCode(), "系统繁忙,请稍后再试"); } }
|