Вы хотите добавить некоторые поля и директивы для типа?
Вы можете использовать @GraphQLContext
для подключения внешних методов в качестве полей. Или даже укажите пользовательский ResolverBuilder
, который возвращает дополнительные Resolver
с (позже они сопоставляются с полями).
Чтобы добавить директивы, вы можете создать аннотации с мета-аннотацией @GraphQLDirective
(примеры см. В тестах).
Наконец, вы, конечно, можете предоставить пользовательский TypeMapper
для User
и полностью взять под контроль то, как этот тип отображается.
например. Вы можете сделать аннотацию как:
@GraphQLDirective(locations = OBJECT)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Key {
public String[] fields;
}
Если вы поместите эту аннотацию на тип:
@Key(fields = "id")
public class User {
@External //another custom annotation
public @GraphQLId @GraphQLNonNull String getId() {...}
}
это будет отображено как:
type User @key(fields: "id") {
id: ID! @external
}
Полагаю, вы знаете о @GraphQLContext
, но вкратце:
//Some service class registered with GraphQLSchemaBuilder
@GraphQLApi
public class UserService {
@GraphQLQuery
public List<Review> getReviews(@GraphQLContext User user) {
return ...; //somehow get the review for this user
}
}
Из-за @GraphQLContext
тип User
теперь имеет поле review: [Review]
(хотя класс User
не имеет этого поля).