我在尝试通过我的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