package com.rongyichuang.config; import graphql.GraphQLError; import graphql.GraphqlErrorBuilder; import graphql.schema.DataFetchingEnvironment; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.graphql.execution.DataFetcherExceptionResolverAdapter; import org.springframework.graphql.execution.ErrorType; import org.springframework.stereotype.Component; /** * GraphQL异常处理器 */ @Component public class GraphQLExceptionHandler extends DataFetcherExceptionResolverAdapter { private static final Logger logger = LoggerFactory.getLogger(GraphQLExceptionHandler.class); @Override protected GraphQLError resolveToSingleError(Throwable ex, DataFetchingEnvironment env) { logger.error("=== GraphQL异常详情 ==="); logger.error("异常时间: {}", java.time.LocalDateTime.now()); logger.error("GraphQL字段: {}", env.getField().getName()); logger.error("GraphQL路径: {}", env.getExecutionStepInfo().getPath()); logger.error("异常类型: {}", ex.getClass().getSimpleName()); logger.error("异常信息: {}", ex.getMessage()); logger.error("异常堆栈:", ex); // 记录请求参数 if (env.getArguments() != null && !env.getArguments().isEmpty()) { logger.error("请求参数: {}", env.getArguments()); } return GraphqlErrorBuilder.newError() .errorType(ErrorType.INTERNAL_ERROR) .message("GraphQL错误: " + ex.getClass().getSimpleName() + " for " + java.util.UUID.randomUUID()) .path(env.getExecutionStepInfo().getPath()) .location(env.getField().getSourceLocation()) .build(); } }