使用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 存储库