Как выставить поле graphql с другим именем
Я изучаю GraphQL и хотел бы знать, есть ли способ переименовать поле ответа, например, у меня есть POJO с этим полем
class POJO {
Long id;
String name;
}
Запрос GraphQL:
type POJO {
id: Long
name: String
}
Мой ответ примерно такой
{
"POJO" {
"id": 123,
"name": "abc"
}
}
Могу ли я переименовать поле имени в нечто вроде userName, чтобы мой ответ был ниже
{
"POJO" {
"id": 123,
"userName": "abc"
}
}
6 ответов
Вы можете использовать псевдонимы GraphQL для изменения отдельных ключей в ответе JSON.
Если это ваш оригинальный запрос
query {
POJO {
id
name
}
}
Вы можете ввести псевдоним GraphQL userName
для поля name
вот так:
query {
POJO {
id
userName: name
}
}
Вы также можете использовать псевдонимы GraphQL, чтобы использовать один и тот же запрос или поле мутации несколько раз в одной и той же операции GraphQL. Это особенно интересно при использовании параметров поля:
query {
first: POJO(first: 1) {
id
name
}
second: POJO(first: 1, skip: 1) {
id
name
}
}
Я знаю, что этот вопрос очень старый, но для переименования поля используется следующий код:
public class ProductReviewType: ObjectGraphType<ProductReview>
{
public ProductReviewType()
{
Field(x => x.ProductReviewId, type: typeof(IdGraphType)).Description("some desc here");
Field(x => x.ProductId).Description("some desc here");
Field("reviewername", x => x.ReviewerName).Description("some desc here");
Field("reviewdate",x => x.ReviewDate).Description("some desc here");
Field("emailaddress", x => x.EmailAddress).Description("some desc here");
Field("rating", x => x.Rating).Description("some desc here");
Field("comments",x => x.Comments).Description("some desc here");
Field("modifieddate", x => x.ModifiedDate).Description("some desc here");
}
}
В приведенном выше коде modifieddate будет именем поля для свойства ModifiedDate.
Вопрос в том, как вы вообще создаете схему? Нет никакой внутренней связи между типами Java и GraphQL - они совершенно не связаны, если вы не коррелируете их. Таким образом, вы можете назвать поля так, как вы хотите, в схеме, и сделать преобразователь (DataFetcher
), который получает значение из любого места (таким образом, любое поле POJO тоже).
Если вы используете инструмент для генерации схемы из типов Java ( https://github.com/graphql-java/graphql-java-annotations, graphql-spqr и т. Д.), Используйте средства этого инструмента для управления отображением. Оба упомянутых инструмента позволяют настроить отображение с помощью аннотаций. GraphQL-SPQR позволяет то же самое через внешнюю конфигурацию.
Если вы уточните свой вопрос дальше, я смогу дать более точный ответ.
Похоже, аннотация GraphQLName может помочь.
Пример из документации: "Кроме того, @GraphQLName может использоваться для переопределения имени поля. Вы можете использовать @GraphQLDescription для задания описания".
Они также могут быть использованы для параметров поля:
public String field(@GraphQLName("val") String value) {
return value;
}
Вы можете использовать псевдонимы GraphQL для изменения отдельных ключей в ответе JSON.
Если это ваш исходный запрос
query { POJO { idname}} вы можете ввести псевдоним GraphQL userName для имени поля следующим образом:
query { POJO { id userName: name}} Вы также можете использовать псевдонимы GraphQL, чтобы использовать один и тот же запрос или поле мутации несколько раз в одной и той же операции GraphQL. Это становится особенно интересно при использовании параметров поля:
запрос {первый: POJO(первый: 1) {имя идентификатора}
второй: POJO(первый: 1, пропустить: 1) {имя идентификатора}}
У меня это сработало, если вы используете синтаксис Field(x=>x.Example):
Field(x => x.Example).Name("exampleNewName");
Это приведет к тому, что ваш запрос будет исходить из этого:
query{
fake{
example
}
}
к этому:
query{
fake{
exampleNewName
}
}