Могу ли я разрешить поля, которых нет в модели, с помощью @GraphQLQuery

Мы используем graphql-spqr для создания схемы graphql из нашего внутреннего API и модели Java.

Сегодня, чтобы получить продукты, например, мы аннотируем методы, которые выглядят следующим образом:

@GraphQLQuery
List<Product> allProducts() {...}

Мы хотим избежать создания новой конечной точки для получения дополнительных полей в Product.

Есть ли способ определить преобразователь для полей, которые не являются частью модели? (аннотация или нет)

В качестве примера предположим, что наша модель Java для продукта + две конечные точки:

class Product {
   String id;
   String name;
}

class Frame {
  String id;
}

// and some kind of relationship between the two
class ProductToFrame {
  String productId;
  String frameId
}

List<Product> allProducts();
List<Frame> getFramesByProductId(String productId);

И мы хотим, чтобы наша схема graphql выглядела так:

type Product {
  id: String
  name: String

  frames: [Frame] 
}

type Frame {
  id: String
}

person Denis G.    schedule 20.11.2020    source источник


Ответы (1)


Все, что вам нужно, это что-то вроде этого (например, рядом с вашим существующим методом allProducts():

@GraphQLQuery
public List<Frame> frames(@GraphQLContext Product product) {
    return getFramesByProductId(product.getId());
}

После этого поле frames будет присоединено к своему контекстному типу Product. Или другими словами: тип Product получит дополнительное поле с именем frames по желанию.

Обязательно просмотрите тесты в SPQR. Они действуют как витрина для большинства функций.

person kaqqao    schedule 20.11.2020