2

我正在使用graphql-spqr-spring-boot-starter库将现有的 Rest API 项目迁移到 GraphQL。我有一段代码可以HttpServletRequestRequestContextHolderRest 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)?这将不胜感激。

4

1 回答 1

1

它是这样的:

@GraphQLMutation
public void whateverMutation(@GraphQLRootContext DefaultGlobalContext<NativeWebRequest> ctx) {
    HttpServletRequest req = ctx.getNativeRequest().getNativeRequest(HttpServletRequest.class);
    HttpServletResponse res = ctx.getNativeRequest().getNativeResponse(HttpServletResponse.class);
    ...
}
于 2021-04-13T09:59:53.537 回答