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

GraphQL SPQR-如何获取客户端使用查询请求的字段列表

漆雕安晏
2023-03-14

有没有办法检索客户端在GraphQL查询中请求的字段列表?

假设我有以下类型:

type Book {

  isbn: String
  title: String
  genre: String
  author: Author
}

type Author {

  name: String
  surname: String
  age: Int
}

在Java端,在用@GraphQLQuery注释的方法中,有没有方法知道客户机请求的字段?

例如,具有以下查询:

html prettyprint-override">query {

  book ( isbn = "12345" ) {
  
    title
    genre
  }
}

query {

  book ( isbn = "12345" ) {
  
    title
    author {
    
      name
      surname
    }
  }
}

我可以知道第一个查询请求了图书的标题和类型字段,第二个请求了图书的标题以及作者的姓名?

谢谢马西莫

共有1个答案

秦光启
2023-03-14

您可以通过GraphQLEnvironment获取此信息。如果您只需要立即子字段,可以这样插入名称:

@GraphQLQuery
public Book book(String isbn, @GraphQLEnvironment Set<String> subfields) {
    ...
}

如果需要所有子字段或其他选择信息,可以注入解析环境(ResolutionEnvironment)并从中获取数据获取环境(DataFetcherenEnvironment)。这反过来使您可以访问整个选择集。

@GraphQLQuery
public Book book(String isbn, @GraphQLEnvironment ResolutionEnvironment env) {
    DataFetchingFieldSelectionSet selection = env.dataFetchingEnvironment.getSelectionSet();
     ...
}
 类似资料:
  • 根据CloudFront的文档(https://docs.aws.amazon.com/amazoncloudfront/latest/developerguide/requestandresponseBehaviorCustomOrigin.html),客户端IP可以是头的前面、中间和结尾。 是Rignt吗?那我怎么才能得到真正的客户端IP呢?

  • 问题内容: 该站点仅包含JSON文档,而没有Java客户端。我应该执行某种映射吗? 例如地理位置查询:http : //www.elasticsearch.org/guide/reference/query- dsl/geo-distance-range- filter.html 如何使用Java客户端编写这样的查询? 谢谢杰森 问题答案: 不明显但不那么复杂;)

  • 我的安全配置有问题,我需要创建一个访问我的应用程序的IP列表。 我的问题是以动态的方式为我的所有应用程序请求获取Ip。但是我不想为我的应用程序的所有请求添加一个HttpServletRequest,我想要的是一个在每个请求之前调用的方法,甚至在SecurityConfig事件之前。 我尝试在我的控制器类中自动生成它,但我的应用程序没有执行。我该怎么做才能让这件事成功?

  • 客户端的HTTP/HTTPS请求。 进程:主进程​ ClientRequest是由EventEmitter来实现Writable Stream​ new ClientRequest(options) 作用:发起新的HTTP/HTTPS请求 options(Object | String) - options是String时即请求URL。 options 是Object时则按以下属性请求: meth

  • 问题内容: 我有一个node.js Connect服务器,用于检查请求的Cookie。为了在节点中测试它,我需要一种写客户端请求并将cookie附加到它的方法。我知道HTTP请求对此具有’cookie’标头,但是我不确定如何设置和发送它- 我还需要在同一请求中发送POST数据,因此我目前正在使用danwrong的restler模块,但似乎没有让我添加该标头。 关于如何使用硬编码的cookie和PO

  • 我正在使用官方的Elasticsearch Java客户端。它工作得很好,但不幸的是,它的对象没有实现可序列化的接口。我特别需要序列化QueryBuilder的实例。 我发现了两种使用客户端序列化对象的方法。其中之一就是使用QueryBuilder。writeTo()。另一个是使用: 但是我找不到如何在这两种情况下反序列化对象。 我也不确定这是否是解决这项任务的最佳方式。