Как выставить поле 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 также поддерживает внешнюю конфигурацию.
Если вы уточните свой вопрос дальше, я смогу дать более точный ответ.