Как мы можем получить HttpServletRequest(DefaultGlobalContext) для GraphQL из RequestContextHolder для GraphQL (используя graphql-spqr-spring-boot-starter)?

Я использую graphql-spqr-spring-boot-starterбиблиотека для переноса существующего проекта Rest API на GraphQL. У меня есть приведенный ниже фрагмент кода для получения текущегоHttpServletRequest из RequestContextHolder для Rest API:

 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
        .currentRequestAttributes()).getRequest();

Однако это возвращает значение null для GraphQL. Я считаю, что это правильно, потому что для GraphQL мы должны использоватьDefaultGlobalContext<ServletWebRequest> и нет HttpServletRequest. Но я не уверен, как мы можем это сделать.

Но я попробовал ниже фрагмент кода:

RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
return (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST); 

Но не вышло - requestAttributes возвращает null.

Я очень новичок в GraphQL, может ли кто-нибудь помочь мне узнать, как получить HttpServletRequest (DefaultGlobalContext) для GraphQL? Это будет очень полезно.

1 ответ

Это выглядит так:

      @GraphQLMutation
public void whateverMutation(@GraphQLRootContext DefaultGlobalContext<NativeWebRequest> ctx) {
    HttpServletRequest req = ctx.getNativeRequest().getNativeRequest(HttpServletRequest.class);
    HttpServletResponse res = ctx.getNativeRequest().getNativeResponse(HttpServletResponse.class);
    ...
}
Другие вопросы по тегам