Как выставить поле 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"
  }
}

Ответ 1

Вы можете использовать псевдонимы 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
  }
}

Ответ 2

Похоже, что может помочь аннотация GraphQLName.

Пример из документации: "Кроме того, @GraphQLName может использоваться для переопределения имени поля. Вы можете использовать @GraphQLDescription для установки описания".

Они также могут использоваться для параметров поля:

public String field(@GraphQLName("val") String value) {
  return value;
}

Ответ 3

Вопрос в следующем: как вы создаете схему в первую очередь? Там нет внутренней связи между типами Java и GraphQL - они полностью не связаны между собой, если вы их не сопоставляете. Таким образом, вы можете называть поля любым способом, который вы хотите в схеме, и создавать преобразователь (DataFetcher), который получает значение из любого места (таким образом, любое поле POJO тоже).

Если вы используете инструмент для создания схемы из типов Java (graphql-java-annotations, graphql-spqr и т.д.), Тогда используйте эти средства инструмента для управления отображением. Оба упомянутых инструмента позволяют настраивать отображение через аннотации. GraphQL-SPQR также поддерживает внешнюю конфигурацию.

Если вы уточните свой вопрос дальше, я смогу дать более точный ответ.