如何自定义 Java GraphQL 错误响应

Posted

技术标签:

【中文标题】如何自定义 Java GraphQL 错误响应【英文标题】:How to customize Java GraphQL error response 【发布时间】:2019-02-07 10:06:27 【问题描述】:

我正在尝试修改 graphql 错误响应。我想从响应中删除空属性。有可能吗?

Current response

我创建了我的 GraphQL 异常,例如 ExceptionWhileDataFetching 和我自己的过滤器客户端错误定义。它工作得很好,但丑陋的空属性在这里,我想删除它们。

例如GraphQL docs 属性扩展应该是可选的,并且在第二个示例屏幕上只有消息属性。这是我想要实现的目标,但我不知道如何实现..

我找到了 GraphqlErrorHelper#toSpecification.. 我认为覆盖它就足够了,GraphQL 库将在没有其他操作的情况下处理错误属性,但它没有..

更新:

我开始考虑是否要尝试做合法的事情.. 我发现我的 ClientException 将正确转到 GraphQLObjectMapper#serializeResultAsJson 中的 getJacksonMapper().writeValueAsString 并且这里的响应以某种方式改变了.. 这部分对于我.. :(

Debug screen

【问题讨论】:

重写filterGraphQLErrors方法并删除空值属性是否不起作用? 我不确定如何实现这一点。在filterGraphQLErrors 我应该只选择我想看到的错误,而不是改变它们的结构,对吧?我尝试调试它,但是当例如MyException#getPath 被调用时,它来自大量的调用,我无法找出响应创建的确切位置以及这些该死的nulls 是如何分配给响应的。 【参考方案1】:

好的,我终于找到解决方案了..

JacksonSerialer 使用注释来附加额外的数据。

所以如果我在我的GraphQLError 类中使用@JsonInclude(JsonInclude.Include.NON_NULL),那么一切都可以按我的意愿工作..

终于result I wanted

【讨论】:

以上是关于如何自定义 Java GraphQL 错误响应的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义 GraphQL 查询验证错误消息

graphql-java:如何在以编程方式生成 graphql 模式时添加自定义标量类型?

如何为 graphql 创建自定义错误/异常处理程序?

在 graphql-java 中注册自定义标量

GraphQL 响应错误“未定义 URLSearchParams”

使用来自突变解析器的 GraphQL Yoga 响应自定义 HTTP 代码