【问题标题】:GraphQL access to HttpRequest on a mutation functionGraphQL 访问突变函数上的 HttpRequest
【发布时间】:2018-07-26 01:16:57
【问题描述】:

您好,我是 GraphQL 新手。

我想将现有端点迁移到 GraphQL 端点 (Java)。 为了继续处理端点的应用程序逻辑,我需要HttpServletRequest 对象。

如何在突变函数中访问HttpServletRequest 对象? 我尝试将它作为参数传递,但我必须声明一个HttpServetRequest 类型。

有没有办法在突变中访问上述对象? 有没有办法声明外部库的类型?

谢谢。

【问题讨论】:

    标签: java graphql graphql-java


    【解决方案1】:

    这通常使用共享上下文来完成。执行操作时,您可以通过DataFetchingEnvironment#getContext 传递一个可供所有Datafetchers(解析器)访问的任意对象。

    例如

    graphQL.execute(ExecutionInput.newExecutionInput()
        .query(operation)
        .context(servletRequest) //this is where you pass any object you need
        .build());
    

    对于较旧的 graphql-java 版本:

    graphQL.execute(query, context);
    

    稍后在您的查询/突变的DataFetcher 中:

    HttpServletRequest request = environment.getContext();
    

    这也是执行授权的常用方式:通过上下文传入用户对象。

    【讨论】:

    • 当使用 execute(ExecutionInput.newExecutionInput() 我得到: java.lang.NoSuchMethodError: graphql.GraphQL.execute(Lgraphql/ExecutionInput;)Lgraphql/ExecutionResult; While execute("my query" ) 返回预期结果。
    • @alobar 那你一定在使用一些旧版本的 graphql-java。在这种情况下,只需使用接受上下文的 execute 方法的适当重载。查看更新后的答案。
    • @alobar 这回答了你的问题吗?
    • 首先感谢您的宝贵回答。不幸的是,当我尝试运行 .execute(query, context) 时,我发现这个函数已被弃用。我使用的graphql-java版本是6.0
    • @alobar 那么你有一个依赖冲突。您使用 v6 构建并使用其他版本运行。分析您的依赖关系树并找出答案。 v6 确实有我首先举例说明的方法。
    猜你喜欢
    • 2016-11-22
    • 2019-05-29
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2016-02-07
    • 2019-01-23
    • 2021-03-09
    相关资源
    最近更新 更多