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();
|
}
|
}
|