Я попытался добавить новые директивы с аргументами в существующие поля каждого типа Query.
TypeDefinitionRegistry typeRegistry = schemaParser.parse(schema);
Map<String, TypeDefinition> operationList = typeRegistry.types();
if(entry.getValue().getName().equals("Query")){
for (Map.Entry<String, TypeDefinition> entry : operationList.entrySet()){
FieldDefinition field : ((ObjectTypeDefinition) entry.getValue()).getFieldDefinitions()
}
}
Мне нужно добавить директиву с набором аргументов для каждого поля, поэтому я попробовал логику, аналогичную следующей кодовой базе, используя параметр env SchemaDirectiveWiringEnvironment.а также некоторые логики в реализации SchemaGenarator. Реализация graphql-java. Но я не смог найти способ добиться этого, так как все методы внутри классов кажутся закрытыми методами
public class UppercaseDirective implements SchemaDirectiveWiring {
@Override
public GraphQLFieldDefinition onField(SchemaDirectiveWiringEnvironment<GraphQLFieldDefinition> env) {
GraphQLFieldDefinition field = env.getElement();
DataFetcher dataFetcher = DataFetcherFactories.wrapDataFetcher(field.getDataFetcher(), {
dataFetchingEnvironment, value ->
if (value == null) {
return null
}
return ((String) value).toUpperCase()
})
return field.transform({ builder -> builder.dataFetcher(dataFetcher) });
}
}
1.Может кто-нибудь объяснить правильный путьчтобы решить эту проблему?2. Есть ли способ преобразовать поле FieldDefinition в поле GraphQLFieldDefinition