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

使用americanexpress/nodes的GraphQL查询列表

慕嘉茂
2023-03-14

我正在使用GraphQL客户端americanExpress/节点。

这是我想要的查询:

query{
  getLatestData(cppsId: "123", type: "battery", dataCount:2) {
    value
    dateTime
}

服务器返回包含值和日期时间的对象列表。使用Postman,服务器成功返回一个列表。

{
"data": {
    "getLatestData": [
        {
            "value": "7823",
            "dateTime": "1564197294"
        },
        {
            "value": "7837",
            "dateTime": "1564196469"
        }
    ]
}
}

我正在使用以下带注释的类:

@GraphQLProperty(name = "getLatestData", arguments = {
@GraphQLArgument(name = "cppsId"), @GraphQLArgument(name = "type"), @GraphQLArgument(name = "dataCount") })
public class GetLatestDataAnnotationClass {
  private String dateTime;
  private String value;

  public GetLatestDataAnnotationClass() {
  }

 //...

并构建请求:

GraphQLTemplate template = new GraphQLTemplate();

GraphQLRequestEntity requestEntity;
try {
  requestEntity = GraphQLRequestEntity.Builder()
      .url(endpoint)
      .request(GetLatestDataAnnotationClass.class)
      .arguments(new Arguments("getLatestData",
          new Argument<String>("cppsId", cppsId), new Argument<String>("type", type), new Argument<Integer>("dataCount", dataCount)))
      .build();
  GraphQLResponseEntity<GetLatestDataAnnotationClass> responseEntity = template.query(
      requestEntity,
      GetLatestDataAnnotationClass.class);

但是,结果是GetLatestDataAnNotationClass类型的单个对象,而不是所需的GetLatestDataAnNotationClass列表。我尝试使用嵌套类,但结果查询类似于:

query { getLatestData (cppsId:"123",type:"battery",dataCount:2) {
    abcd { value dateTime }
    } 
} 

其中abcd是包含GetLatestDataAnnotationClass对象的列表。有没有我遗漏的注释?我如何告诉客户端解析一个列表,而不仅仅是类的一个实例?

谢谢

共有1个答案

邓赤岩
2023-03-14

您可以像这样分离请求类以使其正确序列化。

public class LatestDataRequest {
  @GraphQLArguments({
    @GraphQLArgument(name = "cppsId"),
    @GraphQLArgument(name = "type"),
    @GraphQLArgument(name = "dataCount")
  })
  private List<DataValue> getLatestData;
  ...
}
public class DataValue {
  private String dateTime;
  private String value;
  ...
}

然后生成请求看起来像

GraphQLTemplate template = new GraphQLTemplate();

GraphQLRequestEntity requestEntity;
try {
  requestEntity = GraphQLRequestEntity.Builder()
      .url(endpoint)
      .request(LatestDataRequest.class)
      .arguments(new Arguments("getLatestData",
        new Argument<String>("cppsId", cppsId),
        new Argument<String>("type", type),
        new Argument<Integer>("dataCount", dataCount)))
      .build();
  GraphQLResponseEntity<LatestDataRequest> responseEntity = template.query(requestEntity, LatestDataRequest.class);
 类似资料:
  • 我是GraphQL新手。我知道这是个很基本的问题。但我花了很多时间却没能成功。 我的需求是我需要从java类使用graphql-java api方法发送GraphQL查询。 以下是查询:

  • 刚接触 GraphQL,我在通过 GraphiQL 发送查询时遇到问题。 这是我的方案. js 当我在 graphiql 上运行以下查询时: 我收到“语法错误 GraphQL 请求 (3:9) 预期名称,找到字符串”,但我希望获得 ID 为“23”的用户。 我错过了什么?

  • 和相应的查询解析器 这里的主要想法只是有一个过滤器,可以看到什么食谱有一些成分,用户会通过应用程序通知。 我使用数据库中的所有食谱获得了“recipe”查询,但我需要一个获取这些食谱的查询,然后使用field comprient进行筛选,例如: 食谱-糖蛋糕,配料:糖、蜂蜜、四个… 配方-天鹅绒蛋糕,配料:糖、香草、... 并且用户通知Sugar,API应该返回这2个食谱,但是如果用户通知Suga

  • 但是,当我想使用从上一次查询中获得的Id进行第二次查询并使用该Id作为筛选器时,该怎么办?当我像以前一样在ExampleComponent中返回另一个graphql查询时,我会得到一个错误,即我没有返回有效的react组件。那我该怎么做呢? 提前感谢!

  • 我认为我的问题是一个常见的问题,我正在权衡作为解决方案的GraphQL的成本和收益。 我在一个产品上工作,该产品的数据由基于CRUD的RESTAPI存储。我们的应用程序组件公开了一个数据搜索接口,当然需要某种服务器端支持来请求该数据。这可以包括排序、筛选、选择字段等。当然,在Hibernate上下文中提供这些功能的更传统方式,比如endpoint的查询参数附加项,但是在这一上下文中尝试CopyQL