Псевдоним GraphQL/изменить имя имени поля типа ввода

Мне нужно определить тип ввода GraphQL определенным образом:

input MyInput {
    package: boolean
}

Служба уже отправляет данные как package, и я не могу изменить способ отправки запроса этой службой.

Однако, используя Java, я не могу использовать ключевое слово package в качестве имени поля. Я пробовал использовать @JsonProperty("package") Boolean pckge; в своем классе Java, но значение всегда равно нулю.

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

type MyType {
    package: Boolean
}

Но мне нужно использовать:

@SchemaMapping(typeName = "MyType", field = "package")
public Boolean getPackage(@NonNull MyType myType) {
    return myType.pckge();
}

Однако это не работает для типов ввода, и при попытке я получаю сообщение об ошибке:

You have asked for named type 'MyType' but it's not GraphQLFieldsContainer but rather a 'graphql.schema.GraphQLInputObjectType'

Есть ли способ создать псевдоним/сопоставление имени поля в типе ввода?

Я использую Java 21 и Spring Boot 3.2.2 (с Spring-boot-starter-graphql).

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
174
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне удалось использовать DataFetchingEnvironment в контроллере, чтобы получить запрос и сопоставить переменную с именем переменной «Java».

Например:

@MutationMapping
public MyType updateMyType(@Argument MyType myType, DataFetchingEnvironment env) {
   var mapper = new ObjectMapper();
   var myTypeMap = mapper.convertValue(env.getArguments().get("myType"), Map.class);
   var packge = myTypeMap.get("package");
   // Continue with request now that we have the value
}

Другие вопросы по теме