使用 java netflix graphql 客户端时如何传递请求头?

How to pass request headers when using java netflix graphql client?

提问人:CodeBot 提问时间:9/8/2023 最后编辑:CodeBot 更新时间:9/15/2023 访问量:118

问:

我正在与 HttpClient (JDK 17) 一起使用com.netflix.graphql.dgs:graphql-dgs-client:4.9.16

我正在使用下面创建 graphql 客户端。

GraphQLCLient graphQLClient = GraphQLClient.createCustom(
        host-url,
        requestExecutor::exec);

我的请求执行器基于 HttpClient。

该方法可以接受标头,但我没有看到可以传递或接受 httpheader 的 graphql 客户端方法。requestExecutor.exec(String url, Map<String, ? extends List<String>> headers, String body)

我目前使用的是 -

var request = new GraphQLQueryRequest(
        OurStoreGraphQLQuery.newRequest().oneStoreId(oneStoreId).build(),
        RESPONSE_PROJECTION; 

GraphQLResponse response = graphQLClient.executeQuery(request.serialize());

以上都不是,即 构造函数或方法具有重载的等效项,该等效项接受 HttpHeader 并将其传递给方法。GraphQLQueryRequestexecuteQueryrequestExecutor::exec

  1. 如果 exec 方法不能由用户代码传递而不创建新的实例,那么接受它的意义何在。 -- 从哪里拾取 headers 参数,如何向上面的 headers 参数添加更多标题??headersRequestExecutor

也许我可以使用java-client/#plug-in-your-own-http-client文档中提到的以下样式 -

CustomGraphQLClient client = GraphQLClient.createCustom(url,  (url, headers, body) -> {
    HttpHeaders httpHeaders = new HttpHeaders();
    headers.forEach(httpHeaders::addAll);
    ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>(body, httpHeaders),String.class);
    return new HttpResponse(exchange.getStatusCodeValue(), exchange.getBody());
});

GraphQLResponse graphQLResponse = client.executeQuery(query, emptyMap(), "SubmitReview");
String submittedBy = graphQLResponse.extractValueAsObject("submitReview.submittedBy", String.class);

-- 但看起来每次我的标题更改时,我都必须创建一个自定义客户端实例。是吗?? -- 使用上面建议的方法,看起来我不能在通用方法中使用相同的 requestExecutor,即 requestExecutor::exec。

java graphql netflix netflix-dgs

评论


答: 暂无答案