当前位置: 首页 > 知识库问答 >
问题:

反应图形QL

柳修平
2023-03-14

尝试实现reactive graph ql并遇到一些问题。

pom相关性,

<dependency>
            <groupId>com.graphql-java-kickstart</groupId>
            <artifactId>graphql-kickstart-spring-boot-starter-webflux</artifactId>
            <version>7.0.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.graphql-java-kickstart/graphql-kickstart-spring-boot-starter-tools -->
        <dependency>
            <groupId>com.graphql-java-kickstart</groupId>
            <artifactId>graphql-kickstart-spring-boot-starter-tools</artifactId>
            <version>7.0.1</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.graphql-java-kickstart/graphiql-spring-boot-starter -->
        <dependency>
            <groupId>com.graphql-java-kickstart</groupId>
            <artifactId>graphiql-spring-boot-starter</artifactId>
            <version>7.0.1</version>
        </dependency>

架构:-

type Query {

  store(storeId: Int!): Store!

  stores: [Store!]!
}

type Store {
  storeId: Int!
  name: String!
  address: String!
  city: String!
  zip: String!
}

分解器:-

@Component
public class StoreQuery implements GraphQLQueryResolver {

    @Autowired
    private final StoreDao dao;

    public Store store(int storeId) {
        return dao.findById(storeId);
    }

    public List<Store> stores() {
        return dao.findAll();
    }

}

这里,如果我返回Flux或Mono,得到以下错误。

 "class": "org.springframework.beans.factory.BeanCreationException",
              "msg": "Error creating bean with name 'schemaParser' defined in class path resource [graphql/kickstart/tools/boot/GraphQLJavaToolsAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [graphql.kickstart.tools.SchemaParser]: Factory method 'schemaParser' threw exception; nested exception is java.lang.ClassCastException: class graphql.kickstart.tools.ParameterizedTypeImpl cannot be cast to class java.lang.Class (graphql.kickstart.tools.ParameterizedTypeImpl is in unnamed module of loader 'app'; java.lang.Class is in module java.base of loader 'bootstrap')",


  "class": "java.lang.ClassCastException",
                  "msg": "class graphql.kickstart.tools.ParameterizedTypeImpl cannot be cast to class java.lang.Class (graphql.kickstart.tools.ParameterizedTypeImpl is in unnamed module of loader 'app'; java.lang.Class is in module java.base of loader 'bootstrap')",

所以,尝试作为列表返回。

但是使用阻塞调用将Flux转换为List也会抛出错误,

public List<Store> findAll() {
        return Flux.from(storeCollection.find()).collectList().block();
    }

这里,得到下面的错误。

Exception while fetching data (/stores) : block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-kqueue-2

使用graphiql进行测试。

http://localhost:8089/graphiql

共有2个答案

刘阳舒
2023-03-14

您不能在非阻塞webflux中使用阻塞操作。如果使用kickstart v.7.0.1,则应返回CompletableFuture

public CompletableFuture<List<Store>> findAll() {
    return Flux.fromIterable(dao.findAll())
            .collectList()
            .toFuture();
}
钱修雅
2023-03-14

正如错误所示,您不能在非阻塞webflux中使用阻塞操作。

public Flux<Store> findAll() {
    return Flux.fromIterable(storeCollection.find());
    or
    return Flux.fromStream(storeCollection.find());
}
 类似资料:
  • Highcharts 条形图 以下实例演示了使用负值的,反向条形图。 实例 文件名:highcharts_bar_negative.htm <html> <head> <meta charset="UTF-8" /> <title>Highcharts 教程</title> <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.m

  • 问题内容: 和之间有什么区别?在文档中: 与 什么时候应该使用,什么时候应该使用? 问题答案: 用于描述其属性均为相同类型的对象。 用于描述对象的键事先已知的对象,并且可以表示不同的类型。

  • 是否有一种内置的方法来使用proptypes来确保传递给组件的对象数组实际上是特定形状的对象数组? 也许是这样的? 我是不是漏了什么特别明显的东西?看来这会很受欢迎。

  • 我试图理解他们条形图上的ChartJS文档。这对我来说没有意义,因为顶部的标签在一次意义上看起来似乎只适用于第一个栏(基于颜色),在另一种意义上,它适用于整个图表(它是唯一一个不在工具提示中的标签,它位于前面和中间) 我一直在努力使它更像他们的折线图,它显示了一个带有标签的图例和一个与图表上每条线相关的彩色正方形。(他们没有多行图表的示例,但它确实是这样工作的)。 我希望在顶部有一个图例,表示浅绿

  • 问题内容: 我在构建webapp时遇到了这个问题,并在jsfiddle中复制了它。本质上,每次输入内容时,我都希望调用一个输入,然后将其传递到父App类中,然后将其重新呈现到Message类中。但是输出似乎总是比我实际输入的内容落后一步。jsfiddle演示应该可以自我解释。我想知道我是否做错了任何提示。 html js 问题答案: 呼叫不同步。它创建一个“待处理状态转换”。(有关更多详细信息,请