带有Java/Springboot的GraphQL无法从传递的查询中选取定义为架构中onField的自定义指令
在架构中的directives.graphql文件中定义了自定义指令:带有Java/Springboot的GraphQL无法从传递的查询中选取定义为架构中onField的自定义指令,java,spring-boot,graphql,backend,graphql-java,Java,Spring Boot,Graphql,Backend,Graphql Java,在架构中的directives.graphql文件中定义了自定义指令: directive @reference on FIELD 还传递了GraphQLConfig.java类中的.graphql文件: private static final String[] SCHEMA_FILES = new String[]{"schema/root.graphql","schema/directives.graphql","schema/train
directive @reference on FIELD
还传递了GraphQLConfig.java类中的.graphql文件:
private static final String[] SCHEMA_FILES = new String[]{"schema/root.graphql","schema/directives.graphql","schema/train-details.graphql"};
root.graphql如下所示:
schema{ query: Query}
type Query{ trainDetails( trainId: String!): TrainDetail}
type TrainDetail{ trainId: String trainStatus: String}
train-details.graphql如下所示:
schema{ query: Query}
type Query{ trainDetails( trainId: String!): TrainDetail}
type TrainDetail{ trainId: String trainStatus: String}
在传递给springboot graphqlapi的请求中,我想检查是否传递了指令@reference,然后在代码中执行一些业务逻辑。在Java中的服务器启动期间生成的模式中存在该指令,但当我从请求中传递的查询中提取该指令时,该指令不存在
传入请求的查询,url(在本地启动服务器)
http://localhost:8080/graphql
GraphQL查询:
query($trainId: String!){trainDetails(trainId: $trainId){trainStatus @reference}}
查询变量:
{ "trainId": "123456"}
dataFecther(也已添加到graphql配置类中),其中检查传递的请求中的指令:
public DataFetcher getTrainDetailsDataFecther(){ return environment -> trainDetailsFetcher.getTrainDetails.getTrainDetails(environment);}
getTrainDetails方法:
public TrainDetails getTrainDetails(DataFectchingEnvironment environment){ if(environment.getQueryDirectives().getImmediateDirective("reference").isEmpty()){//perform some logic}}
if检查总是返回false,即使@reference作为指令在请求查询中传递。它无法识别已在查询中的字段上传递了指令
请注意,这是关于字段的指令,而不是关于字段定义的指令,因此没有在train-details.graphql中添加该指令作为模式中的定义。我通过Twitter联系了Tejas Shikhare(),他很友好地回答了我代码的问题: