标签: graphql-java-tools

从 graphql 获取解析器级别的请求字段

来自 graphql 模式的书籍模型

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

Run Code Online (Sandbox Code Playgroud)

所以我有一个 Book 解析器

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

Run Code Online (Sandbox Code Playgroud)

效果很好。

现在假设我正在使用这个 graphql 查询,它只请求 Book 的一个字段

{
  bookById(id: "someId") {
    name
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是,如何获取有关请求字段的 bookById 方法级别的信息(在本例中仅是名称字段)?这对于 GraphQLQueryResolver 概念来说是可能的吗?

dataFetcher 的示例

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作得很好,但我对解析器方式感兴趣。是否可以?

graphql graphql-java graphql-java-tools

9
推荐指数
1
解决办法
4534
查看次数

使用 graphql-java-tools 和 graphql-spring-boot-starter 进行错误处理

如何处理 graphQL API 中的错误?我正在使用 graphql-java-tools 和 graphql-spring-boot-starter。我创建了错误处理程序,但每次我都会收到响应 200,即使抛出异常也是如此。你能告诉我应该如何设置错误代码(例如 400)作为响应吗?

@Component
public class CustomGraphQLErrorHandler implements GraphQLErrorHandler {

    @Override
    public List<GraphQLError> processErrors(List<GraphQLError> list) {
        return list.stream().map(this::getNested).collect(Collectors.toList());
    }

    private GraphQLError getNested(GraphQLError error) {
        if (error instanceof ExceptionWhileDataFetching) {
            ExceptionWhileDataFetching exceptionError = (ExceptionWhileDataFetching) error;
            if (exceptionError.getException() instanceof GraphQLError) {
                return (GraphQLError) exceptionError.getException();
            }
        }
        return error;
    }
}
Run Code Online (Sandbox Code Playgroud)

java spring graphql graphql-java-tools

6
推荐指数
1
解决办法
7560
查看次数

如何在 Spring Boot + GraphQL Java 工具上下文中执行对 GraphQL 的 Java 调用?

在 Spring Boot 应用程序中,我们已经拥有一个功能齐全的 GraphQL 端点,.graphqls通过 GraphQL Java 工具(我们包含依赖项)提供文件,并通过我们的基类实现和后续的graphql-spring-boot-starter处理数据解析。QueryGraphQLQueryResolverGraphQLResolver

出于业务需求,我们必须重新创建标准 REST API 端点,所以我想知道为什么不直接调用 GraphQL(而不是再次“手动”重新实现数据解析)?由于它位于同一个后端应用程序中,因此无需进行 HTTP 或 servlet (ForwardRequest) 调用,只需调用 Java 中的一些 API 即可。问题是我不知道如何继续。

我阅读了这个示例,但它使用的是基本的 GraphQL Java(不是工具): https ://www.graphql-java.com/documentation/v9/execution/

我知道这应该是可能的,因为我们可以在测试中这样做: https://github.com/graphql-java-kickstart/graphql-spring-boot/blob/master/example-graphql-tools/src/test/java /com/graphql/sample/boot/GraphQLToolsSampleApplicationTest.java

但是如何在常规代码中做到这一点呢?不存在这样的东西GraphQLTemplate

我还尝试在以下位置搜索示例:

但没有发现任何与我们的需求相关的内容。

在文档中找不到更多内容:

我错过了什么?理想情况下,我希望注入一些GraphQLSomething这样的内容:

@RestController
@RequestMapping(path = "api")
public class CompanyController {

    @Autowired
    private GraphQLSomething graphQLSomething;

    @GetMapping("company/{id}")
    public ResponseEntity<?> societe(@PathVariable @NotNull Integer id) {
        GraphQLSomethingResult result = GraphQLSomething.query("company(id: $id) { id name andsoone …
Run Code Online (Sandbox Code Playgroud)

java spring-boot graphql graphql-java graphql-java-tools

2
推荐指数
1
解决办法
8102
查看次数