Micronaut GraphQL:如何从 GraphQL 处理程序中使用非 200 HTTP 状态代码进行响应?
Micronaut GraphQL: How to respond with a non-200 HTTP status code from within GraphQL handler?
按照文档,这是我的异常处理程序 (Kotlin):
@Produces
@Singleton
@Requirements(Requires(classes = [ForbiddenException::class, ExceptionHandler::class]))
class ForbiddenExceptionHandler : ExceptionHandler<ForbiddenException, HttpResponse<*>> {
override fun handle(request: HttpRequest<*>, exception: ForbiddenException): HttpResponse<*> {
return HttpResponse.status<String>(HttpStatus.FORBIDDEN, exception?.message)
}
}
从我的 GraphQL 处理程序中抛出 ForbiddenException 会将消息冒泡到响应正文中,但状态代码始终为 200。
示例响应:
{
"errors": [
{
"message": "Exception while fetching data (/createUser) : FORBIDDEN",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"createUser"
],
"extensions": {
"classification": "DataFetchingException"
}
}
],
"data": null
}
Micronaut 版本:1.3.3
Micronaut GraphQL 版本:1.3.0.RC1
免责声明:
GraphQL 不是 REST。您在这里提出的问题与 graphql 规范的核心基础(以及任何 graphql 的一般实现)有关。
他们选择嵌入在执行查询时遇到的大多数错误,但始终 return 200 HTTP 状态。因此,您将无法在您的项目中更改它。不是graphql的配置-java.
好消息是错误的格式是已知的。因此,您可以反序列化应用程序中的错误 return 负载,并正确处理 graphql 抛出的任何错误。
请查看 this link 以深入了解 REST 和 Graphql 之间的主要区别。
按照文档,这是我的异常处理程序 (Kotlin):
@Produces
@Singleton
@Requirements(Requires(classes = [ForbiddenException::class, ExceptionHandler::class]))
class ForbiddenExceptionHandler : ExceptionHandler<ForbiddenException, HttpResponse<*>> {
override fun handle(request: HttpRequest<*>, exception: ForbiddenException): HttpResponse<*> {
return HttpResponse.status<String>(HttpStatus.FORBIDDEN, exception?.message)
}
}
从我的 GraphQL 处理程序中抛出 ForbiddenException 会将消息冒泡到响应正文中,但状态代码始终为 200。
示例响应:
{
"errors": [
{
"message": "Exception while fetching data (/createUser) : FORBIDDEN",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"createUser"
],
"extensions": {
"classification": "DataFetchingException"
}
}
],
"data": null
}
Micronaut 版本:1.3.3 Micronaut GraphQL 版本:1.3.0.RC1
免责声明: GraphQL 不是 REST。您在这里提出的问题与 graphql 规范的核心基础(以及任何 graphql 的一般实现)有关。
他们选择嵌入在执行查询时遇到的大多数错误,但始终 return 200 HTTP 状态。因此,您将无法在您的项目中更改它。不是graphql的配置-java.
好消息是错误的格式是已知的。因此,您可以反序列化应用程序中的错误 return 负载,并正确处理 graphql 抛出的任何错误。
请查看 this link 以深入了解 REST 和 Graphql 之间的主要区别。