使用graphql-java-tools和graphql-spring-boot-starter处理错误。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用graphql-java-tools和graphql-spring-boot-starter处理错误。相关的知识,希望对你有一定的参考价值。

请你告诉我,我应该如何处理我的graphQL API中的错误。我正在使用graphql-java-tools和graphql-spring-boot-starter。我创建了错误处理程序,但每次我得到的响应200,甚至当异常被抛出。你能告诉我,我应该如何设置错误代码,如400的响应?

@Component
public class CustomGraphQLErrorHandler implements GraphQLErrorHandler 

    @Override
    public List<GraphQLError> processErrors(List<GraphQLError> list) 
        return list.stream().map(this::getNested).collect(Collectors.toList());
    

    private GraphQLError getNested(GraphQLError error) 
        if (error instanceof ExceptionWhileDataFetching) 
            ExceptionWhileDataFetching exceptionError = (ExceptionWhileDataFetching) error;
            if (exceptionError.getException() instanceof GraphQLError) 
                return (GraphQLError) exceptionError.getException();
            
        
        return error;
    

答案

当GraphQL服务器可以接受请求时,它返回一个HTTP 200(语法是有效的,服务器是向上的...)。

如果发生错误,它会返回一个200,并在响应中填写错误列表。

所以,在客户端,你会有。

  • 技术性服务器错误,如果HTTP状态与200不同的话
  • 如果HTTPstatus为200,并且错误列表不是空的,那么在处理请求时就会出现错误(技术性或非技术性)。
  • 如果HTTPstatus是200,并且错误列表不存在,就不会出错(根据GraphQL规范,它不应该存在,也不应该是空的)。

Etienne

以上是关于使用graphql-java-tools和graphql-spring-boot-starter处理错误。的主要内容,如果未能解决你的问题,请参考以下文章

graphql servlet 未使用 graphql-java-tools 启动(未找到模式文件?)

在 graphql-java-tools 中禁用 GraphQL Introspection

如何在 graphql-java-tools Resolver 中 @Autowire 一个 JPA 存储库

graphql-java-tools:空参数与不存在参数

记录初学Spring boot中使用GraphQL编写API的几种方式

常见排序算法-----希尔排序