Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
graphql java错误数据(如扩展)正在填充到;讯息;客户端上的字段_Graphql_Apollo_Graphql Java - Fatal编程技术网

graphql java错误数据(如扩展)正在填充到;讯息;客户端上的字段

graphql java错误数据(如扩展)正在填充到;讯息;客户端上的字段,graphql,apollo,graphql-java,Graphql,Apollo,Graphql Java,在GraphQLJava中,我在GraphQLError上重写getExtensions,以便为Apollo客户端传递一个“代码”扩展 当我添加断点时,我可以看到GraphQLObjectMapper在executionResult及其所有字段中看到了错误,包括按预期正确设置的扩展 但是,当错误到达apollo时,它会发生奇怪的变形,整个错误对象(包括扩展数组)似乎被塞入字符串消息字段,如下所示: { "errors": [ { "message": "Unexp

在GraphQLJava中,我在GraphQLError上重写getExtensions,以便为Apollo客户端传递一个“代码”扩展

当我添加断点时,我可以看到GraphQLObjectMapper在executionResult及其所有字段中看到了错误,包括按预期正确设置的扩展

但是,当错误到达apollo时,它会发生奇怪的变形,整个错误对象(包括扩展数组)似乎被塞入字符串消息字段,如下所示:

    {
  "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