我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphq
Posted
技术标签:
【中文标题】我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphql-spqr-spring-boot-starter)?【英文标题】:How can we get HttpServletRequest(DefaultGlobalContext) for GraphQL from RequestContextHolder for GraphQL (using graphql-spqr-spring-boot-starter)? 【发布时间】:2020-10-01 23:15:54 【问题描述】:我正在使用graphql-spqr-spring-boot-starter
库将现有的 Rest API 项目迁移到 GraphQL。我有一段代码可以从 RequestContextHolder
获取当前的 HttpServletRequest
用于 Rest API:
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
.currentRequestAttributes()).getRequest();
但是,对于 GraphQL,这将返回 null。我相信这是正确的,因为对于 GraphQL,我们必须使用 DefaultGlobalContext<ServletWebRequest>
而不是 HttpServletRequest
。但我不确定我们该怎么做。
但是,我尝试了下面的代码:
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
return (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST);
但它不起作用 - requestAttributes
返回 null。
我是 GraphQL 的新手,谁能帮我知道如何获取 GraphQL 的 HttpServletRequest (DefaultGlobalContext)?这将不胜感激。
【问题讨论】:
【参考方案1】:是这样的:
@GraphQLMutation
public void whateverMutation(@GraphQLRootContext DefaultGlobalContext<NativeWebRequest> ctx)
HttpServletRequest req = ctx.getNativeRequest().getNativeRequest(HttpServletRequest.class);
HttpServletResponse res = ctx.getNativeRequest().getNativeResponse(HttpServletResponse.class);
...
【讨论】:
以上是关于我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphq的主要内容,如果未能解决你的问题,请参考以下文章
我们如何从 apollo-server 模块传递 ApolloServer 中的数据源和合并的 graphql 模式和解析器?
如何使用 apollo 服务器从变量运行 graphql 查询
如何将数据从反应组件传递到 Apollo graphql 查询?