当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot客户端中为graphql查询传递变量时出错

费学
2023-03-14

我正在做一个项目,并试图在我的SpringBoot应用程序中使用GraphQL后端服务器。我已经编写了一个连接到GraphQL后端并创建/获取数据的客户端,但是当我试图从应用程序传递变量并通过查询时,它会抛出一个错误。但是如果我只是注释变量部分并直接在查询中硬编码值,它就可以正常工作。

突变查询-突变($name: String!){createList(name:$name){更新listId name}}

变量-{names:“bagName”}

Java客户端-

'''

public CreateListDto getFavouritesDetails(String shoppingListName, String customerId, String storeId, String langId) throws IOException {

        GraphqlRequestBody graphQLRequestBody = new GraphqlRequestBody();

        System.out.println("print this"+shoppingListName+"custId"+customerId);
        final String query = GraphqlSchemaReaderUtil.getSchemaFromFileName("createList");
        String variables = GraphqlSchemaReaderUtil.getSchemaFromFileName("variables");
        graphQLRequestBody.setVariables(variables.replace("bagName", "Avisss"));
        graphQLRequestBody.setQuery(query);
        //System.out.println("graphQLRequestBody----------"+graphQLRequestBody.getQuery());
        System.out.println(graphQLRequestBody.getVariables());
        CreateListDto webClient = WebClient.builder().defaultHeaders(httpHeaders -> {
            httpHeaders.set("X-User-Id", "XXXXXXXXXXX");
            httpHeaders.set("X-Retail-Id",storeId );
            httpHeaders.set("X-Is-Anonymous", Boolean.toString(true));
        }).build()
                .post()
                .uri(url)
                .bodyValue(graphQLRequestBody)
                .retrieve()
                .bodyToFlux(CreateListDto.class)
                .blockFirst();
        System.out.println(graphQLRequestBody.getQuery());
        //System.out.println(graphQLRequestBody.getVariables());

        return webClient;

'''

Maven依赖项--

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

在控制台中获取以下错误,并打印请求系统输出-

GraphQL请求主体:::-变异{createList(名称:“sl114”){updated listId name}GraphQL请求变量::-{“name”:“Avisss”}

2022-01-23 16:29:40.697错误3748---[nio-8080-exec-3]o.a.c.c.c.[dispatcherServlet]:Servlet。路径为[/shoppingbag]的上下文中servlet[dispatcherServlet]的服务()引发异常[Request processing failed;嵌套异常为org.springframework.web.reactive.function.client.WebClientResponseException$BadRequest:400来自POST的错误请求https://dev.test.com/graphql]有根本原因

组织。springframework。网状物反应性。作用客户WebClientResponseException$BadRequest:来自POST的400个错误请求https://dev.test.com/graphql在org。springframework。网状物反应性。作用客户WebClient响应异常。create(WebClientResponseException.java:196)~[spring-webflux-5.3.14.jar:5.3.14]抑制:reactor。果心出版商FluxOnAssemblyException$OnAssemblyException:在以下站点发现错误:*_检查点⇢ 邮递员400https://dev.test.com/graphql[DefaultWebClient]原始堆栈跟踪:位于组织。springframework。网状物反应性。作用客户WebClient响应异常。在org上创建(WebClientResponseException.java:196)~[spring-webflux-5.3.14.jar:5.3.14]。springframework。网状物反应性。作用客户DefaultClientResponse。Reactor处的lambda$createException$1(DefaultClientResponse.java:207)~[spring-webflux-5.3.14.jar:5.3.14]。果心出版商FluxMap$MapSubscriber。onNext(FluxMap.java:106)~[reactor-core-3.4.13.jar:3.4.13]位于Reactor。果心出版商FluxOnErrorResume$ResumeSubscriber。onNext(FluxOnErrorResume.java:79)~[reactor-core-3.4.13.jar:3.4.13]位于Reactor。果心出版商FluxDefaultIfEmpty$DefaultIfEmptySubscriber。onNext(FluxDefaultIfEmpty.java:101)~[reactor-core-3.4.13.jar:3.4.13]

共有1个答案

颛孙镜
2023-03-14

事情解决了。有两个问题——1)graphQL模式和2)WebClient。

我更正了模式,并使用HttpClient而不是WebClient。

 类似资料:
  • 我尝试执行Graphql客户端查询。遗憾的是,我找不到任何关于如何使用动态图QL客户端进行简单变异的文档或示例。这是文件https://quarkus.io/guides/smallrye-graphql-client. {0}..{4} 是可变占位符。有人知道如何使用DynamicGraphlQlClient执行这个查询吗? 谢谢

  • 错误:网络错误:响应不成功:已接收状态代码400 更新:以下是错误详细信息: [GraphQL错误]:消息:类型为“String!”的变量“$OrderBy”用于应为“ItemorderByInput”类型的位置。位置:[object object],[object object],路径:未定义 尝试让ALL_ITEMS_QUERY接受orderBy变量。我是不是漏掉了什么?

  • 我尝试使用以下库来使用graphql订阅: GraphQL-服务器端订阅 客户端的订阅-传输-WS 因此,在传递给用于筛选数据的函数的回调中,我没有获取请求者参数的变量对象和上下文对象。 库的安装版本如下所示:

  • 问题内容: 如何在sql查询中传递java字符串变量。我已经完成了所有JDBC连接。 我的SQL数据库查询是 它不起作用。但是,如果我执行以下代码,其工作原理 现在告诉我如何将变量名传递给sql查询以执行此操作。Jst告诉我如何将变量locationnames传递给comp.name。 我完整的Java函数如下所示:locationCombo表示在组合框中选择的项目。CropCombo也表示相同的

  • 我已经用graphql-go实现了一个graphql服务器,我在前端使用Apollo。不带参数的简单查询和使用输入对象类型的突变可以很好地工作,但出于某种原因,在查询中传递标量类型参数将返回错误: 我的使用再简单不过了;在客户端,我的查询是: 它在后端解析为此字段: 我尝试过传递输入对象、字符串等,但似乎没有查询参数、标量或其他参数在后端得到满足。我已经尝试了GraphQL-Go的master和V

  • 我对Neo4J花了不少心思,但对graphql却一筹莫展 我通过运行以下操作创建了graphql模式: 我有一个带有三个标签的节点类型。我尝试在graphiql中运行以下查询,得到了同样的错误。由于堆栈的原因,我想知道graphiql是否在添加meta并移动到了neo4j浏览器--同样的错误。 查询: 错误: 我可能做了一些明显错误的事情,但任何帮助都将是感激的