如何自定义 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-java:如何在以编程方式生成 graphql 模式时添加自定义标量类型?