如何从 Spring Boot 应用程序中的 graphQL 端点中的传入消息读取请求标头

Jua*_*bos 7 java spring-boot graphql

我有一个使用 graphql 端点运行的 Spring Boot 应用程序,该端点验证并执行查询和突变,但是,我需要读取传入消息中的一个标头,以便将其值传递给另一个端点。graphql 有没有办法读取这些值?某种 getHeaders 或类似的东西?

Ken*_*han 8

GraphQL 本身并没有定义任何与如何通过网络公开它相关的东西,因此它没有定义任何与获取 HTTP 标头相关的东西。开发人员使用他们的方式。所以,这取决于你使用的底层技术通过 HTTP 提供 GraphQL。

考虑您使用graphql-spring-bootgraphql-java-tools,并假设您没有自定义GraphQLContext,您可以尝试向DataFetchingEnvironment解析器函数添加参数,然后从中获取GraphQLContext。然后,您可以HttpServletRequest从上下文中获取并访问标头:

    public Foo resolveFoo(Map<String,String> input , DataFetchingEnvironment env){

        GraphQLContext context =  env.getContext();
        HttpServletRequest request = context.getHttpServletRequest().get();
        request.getHeader("content-type");
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

@Ken Chan 的解决方案对我不起作用。GraphQLContext没有名为 的方法getHttpServletRequest
通过使用来解决它GraphQLServletContext。您可以将代码更改为:

public Foo resolveFoo(Map<String,String> input , DataFetchingEnvironment env){

    GraphQLServletContext context =  env.getContext();
    String header = context.getHttpServletRequest().getHeader("content-type");
}
Run Code Online (Sandbox Code Playgroud)