graphql java错误数据(如扩展)正在填充到;讯息;客户端上的字段
在GraphQLJava中,我在GraphQLError上重写getExtensions,以便为Apollo客户端传递一个“代码”扩展 当我添加断点时,我可以看到GraphQLObjectMapper在executionResult及其所有字段中看到了错误,包括按预期正确设置的扩展 但是,当错误到达apollo时,它会发生奇怪的变形,整个错误对象(包括扩展数组)似乎被塞入字符串消息字段,如下所示:graphql java错误数据(如扩展)正在填充到;讯息;客户端上的字段,graphql,apollo,graphql-java,Graphql,Apollo,Graphql Java,在GraphQLJava中,我在GraphQLError上重写getExtensions,以便为Apollo客户端传递一个“代码”扩展 当我添加断点时,我可以看到GraphQLObjectMapper在executionResult及其所有字段中看到了错误,包括按预期正确设置的扩展 但是,当错误到达apollo时,它会发生奇怪的变形,整个错误对象(包括扩展数组)似乎被塞入字符串消息字段,如下所示: { "errors": [ { "message": "Unexp
{
"errors": [
{
"message": "Unexpected error value: { message: \"Exception while fetching data (/myQuery) : Didn't work\", locations: [[Object]], path: [\"myQuery\"], extensions: { code: \"MY_CODE\", classification: \"DataFetchingException\" } }",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"mailLabels"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR"
}
}
],
"data": null
}
据我所知,阿波罗没有做错任何事。我怀疑graphql java可能是将整个错误填充到“message”字段中,然后将代码设置为“INTERNAL_SERVER_error”的那个“,但我不是很确定。我可以在GraphQLJava端做些什么来防止这种情况,并使它正确地传递扩展,而不是将它们塞进消息值中?任何帮助都将不胜感激。这不是由
graphql java
引起的,而是graphql java servlet
引起的。在一些旧版本中,默认情况下,它不会将graphqleror
序列化到GraphQL规范定义的结构,该规范应在本手册的7.5.1中修复
如果无法升级到最新版本,最简单的方法是自定义GraphQLObjectMapper
并覆盖其convertSanitizedExecutionResult
:
公共类CustomObjectMapper扩展了GraphQLObjectMapper{
@凌驾
公共映射convertSanitizedExecutionResult(ExecutionResult ExecutionResult,布尔值includeData){
映射结果=super.convertsanizedexecutionresult(executionResult,includeData);
if(result.containsKey(“错误”)){
result.put(“errors”,executionResult.getErrors().stream().map(err->err.toSpecification()).collect(toList());
}
}
}
谢谢你,肯。我运行的是GraphQLJavaServlet 8.0.0,但现在我也确认了它在9.0.1中为我实现。不过,我将尝试自定义GraphqlObjectMapper