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

时间:2020-06-12 07:02:48

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

我正在使用graphql-spqr-spring-boot-starter库将现有的Rest API项目迁移到GraphQL。我下面有一段代码可以从HttpServletRequest获取Rest API的当前RequestContextHolder

 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 个答案:

答案 0 :(得分:0)

事情是这样的:

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