GraphQL-SPQR - ошибка со списком без обобщений
Моя схема GraphQL:
//Schema generated from query classes
GraphQLSchema schema = new GraphQLSchemaGenerator()
.withBasePackages("com.blah.blah")
.withOperationBuilder(new DefaultOperationBuilder(DefaultOperationBuilder.TypeInference.UNLIMITED))
.withOutputConverters((config, defaults) -> defaults.drop(ObjectScalarAdapter.class))
.withResolverBuilders(new AnnotatedResolverBuilder())
.withOperationsFromSingleton(myObjectQuery)
.withTypeTransformer(new DefaultTypeTransformer(true, true))
.withValueMapperFactory(new JacksonValueMapperFactory())
.generate();
У меня определен GraphQLQuery:
@GraphQLQuery(name = "getMyObject")
public MyObject getMyObject() {}
который возвращает класс "MyObject"
класс MyObject не использует обобщенные значения и определяется следующим образом (я не могу его изменить), хотя я знаю, что myList содержит объекты типа MyListType:
public class MyObject {
private List myList;
public List getMyList() {
return myList;
}
}
Используя Graphi QL (предположите, что поля действительны):
{
getMyObject() {
id
myList{
myListTypeId
}
}
}
Результаты в:
{
"errors": [
{
"message": "Validation error of type SubSelectionNotAllowed: Sub selection not allowed on leaf type null of field myList@ 'getMyObject/myList'",
"locations": [
{
"line": 4,
"column": 5
}
]
}
]
}
Как мне решить эту ошибку? Я добавил аспект, чтобы заставить возвращаемый результат из getMylist() быть списком, но это, очевидно, не повлияло на шаг проверки.
Вопрос заключается в следующем: как настроить схему, чтобы она позволяла получателям возвращать неуниверсальные списки или карты?
0 ответов
Насколько я понимаю, в геттер нужно добавить @GraphQLQuery.
public class MyObject {
private List myList;
@GraphQLQuery(name = "myList")
public List getMyList() {
return myList;
}
}
Как вы упомянули, возможно, вы не сможете это изменить. Одним из способов может быть создание объекта-оболочки, поэтому вместо возврата MyObject вы возвращаете MyWrapperObject, который принимает MyObject в конструкторе и имеет SPQR-совместимые методы получения для доступа к переменным. В качестве альтернативы есть @GraphQLContext, который вы можете использовать для добавления (без изменения класса) новых методов. Эти методы могут быть совместимы с SPQR.
надеюсь, это поможет