【问题标题】:How can we get HttpServletRequest(DefaultGlobalContext) for GraphQL from RequestContextHolder for GraphQL (using graphql-spqr-spring-boot-starter)?我们如何从 GraphQL 的 RequestContextHolder 获取 GraphQL 的 HttpServletRequest(DefaultGlobalContext)(使用 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)?这将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    是这样的:

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

    【讨论】:

      猜你喜欢
      • 2020-08-19
      • 2020-11-16
      • 2021-02-07
      • 2021-08-31
      • 2023-03-21
      • 2021-07-25
      • 2020-09-16
      • 2020-09-23
      • 2020-07-07
      相关资源
      最近更新 更多