2

Graphql スキーマからの書籍のモデル

type Book {
  id: ID
  name: String
  pageCount: Int
  author: Author
}

だから私はBookのためにこのリゾルバーを持っています

public class BookResolver implements BookByIdQueryResolver, GraphQLQueryResolver {
    private final MockRepository mockRepository;

    public BookResolver(MockRepository mockRepository) {
        this.mockRepository = mockRepository;
    }

    @Override
    public BookTO bookById(String id) {
        return mockRepository.getBookById(id);
    }
}

それは正常に動作します。

ここで、Book の 1 つのフィールドのみを要求するこの graphql クエリを使用していると仮定します。

{
  bookById(id: "someId") {
    name
  }
}

問題は、要求されたフィールド (この場合は名前フィールドのみ) に関する bookById メソッド レベルの情報を取得する方法です。これは GraphQLQueryResolver の概念でも可能ですか?

dataFetcher を使用した例

public DataFetcher getBookByIdDataFetcher() {
        return dataFetchingEnvironment -> {
            String bookId = dataFetchingEnvironment.getArgument("id");
            List<SelectedField> requestedFields = dataFetchingEnvironment.getSelectionSet()
                    .getFields()
                    .stream()
                    .collect(Collectors.toList());
            return books
                    .stream()
                    .filter(book -> book.get("id").equals(bookId))
                    .findFirst()
                    .orElse(null);
        };
    }

これは非常にうまく機能しますが、Resolver の方法に興味があります。出来ますか?

4

1 に答える 1