lrj
昨天 9f8395fab13ca4b230a0f7d62636e209745c91d4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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();
    }
}