我正在使用 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/