Есть ли способ, как добавить новую пользовательскую директиву, которая имеет набор аргументов для TypeDefinitionRegistry typeRegistry - PullRequest
0 голосов
/ 26 сентября 2019

Я попытался добавить новые директивы с аргументами в существующие поля каждого типа 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

...