Мне нужно определить тип ввода 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).




Мне удалось использовать 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
}