Как выставить поле 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
   }
}
Другие вопросы по тегам