本文介绍了使用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-24 09:08