我在尝试通过我的Kotlin代码扩展RuntimeException并实现Java中定义的GraphQLError接口(interface)时遇到以下错误。这是错误:

以下是我的代码:

class NegativeCountException() : RuntimeException(), GraphQLError {
  override fun getMessage(): String? {
    TODO("not implemented")
  }
  <...>
}
其中GraphQLError是一个接口(interface),用Java定义,如下所示:
public interface GraphQLError {
  String getMessage();
  <...>
}
似乎与getMessage()中定义的Throwable相冲突。
我不能更改接口(interface)的代码,因为它来自库。
如何创建自己的运行时异常,该异常将实现GraphQLError

PS:我也尝试了以下操作,并收到了非常类似的错误:
class NegativeCountException(override val message: String?) : RuntimeException(), GraphQLError {
  <...>
}

最佳答案

这是一个graphql问题。我的解决方法:

重新实现GraphQLError,ExceptionWhileDataFetching和DataFetcherErrorHandler。

KGraphQLError是用于固定错误的“固定” kotlin接口(interface)(使用val而不是getter)。

在KDataFetcherErrorHandler中:用ExceptionWhileDataFetching替换此行中的KExceptionWhileDataFetching:val error = ExceptionWhileDataFetching(path, exception, sourceLocation)KExceptionWhileErrorHandling实现GraphQLError。浏览代码,并将所有if (exception is GraphQLError)实例替换为(exception is KGraphQLError)
将新的KDataFetcherErrorHandler传递到您的queryExecutionStrategy和mutationExecutionStrategy。

您的自定义错误现在可以扩展Throwable并实现KGraphQLError并得到正确处理。

更多信息在这里:http://graphql-java.readthedocs.io/en/latest/execution.html

08-03 14:32