本文介绍了使用 graphql-java-tools 和 graphql-spring-boot-starter 进行错误处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何处理我的 graphQL API 中的错误?我正在使用 graphql-java-tools 和 graphql-spring-boot-starter.我创建了错误处理程序,但每次即使抛出异常,我也会收到响应 200.你能告诉我我应该如何设置错误代码,例如 400 作为响应吗?

How to handle errors in my graphQL API? I am using graphql-java-tools and graphql-spring-boot-starter. I created error handler but every time I get response 200 even when exception was thrown. Could you tell me how I should set error code e.g 400 in response?

@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(语法有效,服务器已启动...).

The GraphQL server returns an HTTP 200 when it can accept the request (the syntax is valid, the server is up...).

如果发生错误,则返回 200 并在响应中填充错误列表.

If an error occurs, it returns an 200 and fills the errors list in the response.

因此,在客户端,您将:

So, on client side, you will have:

  • 技术服务器错误,如果 HTTP 状态不是 200
  • 处理请求时的错误(技术性或非技术性)如果 HTTP状态为 200 且错误列表不为空
  • 如果 HTTP 没有错误状态是 200 并且错误列表不存在(它不应该是存在和空,根据 GraphQL 规范)

这篇关于使用 graphql-java-tools 和 graphql-spring-boot-starter 进行错误处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-20 05:31