java - 我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphql-spqr-spring-boot-starter)?

标签 java spring-boot graphql graphql-spqr graphql-spqr-spring-boot-starter

我正在使用 graphql-spqr-spring-boot-starter库将现有的 Rest API 项目迁移到 GraphQL。我有一段下面的代码来获取当前的 HttpServletRequest来自 RequestContextHolder对于 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返回空值。

我是 GraphQL 的新手,谁能帮我知道如何为 GraphQL 获取 HttpServletRequest (DefaultGlobalContext)?我们将不胜感激。

最佳答案

它是这样的:

@GraphQLMutation
public void whateverMutation(@GraphQLRootContext DefaultGlobalContext<NativeWebRequest> ctx) {
    HttpServletRequest req = ctx.getNativeRequest().getNativeRequest(HttpServletRequest.class);
    HttpServletResponse res = ctx.getNativeRequest().getNativeResponse(HttpServletResponse.class);
    ...
}

关于java - 我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 graphql-spqr-spring-boot-starter)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62339166/

相关文章:

java - 查找除 - regex 之外的标点符号

java - 不带 Spring Boot 的执行器 2.X

spring - 使用 Spring Security 在 OAuth2 Web 客户端上存储 JWT token

meteor - Apollo/GraphQl-类型必须为输入类型

java - environment.getArgument 无法在 graphql-java 中转换为我自己的 java 对象

graphql - Typegraphql+TypeORM : save/update an array of entities

java - KafkaConsumer无法轮询消息,但kafka-console-consumer.sh可以工作,为什么?

java - 使用 JMS/ActiveMQ 并发同步请求-回复 - 模式/库?

java - 无法在谷歌地图 Activity 中导航,它总是会生成回到我当前的位置

java - 如何为具有 Excel 工作表文件的 InputStream 构造响应正文?