有没有办法使用 spring boot starter app graphql-spring-boot-starter 公开 2 个 graphql 端点?

Is there a way to expose 2 graphql endpoints using spring boot starter app graphql-spring-boot-starter?

目前我们正在使用

    <dependency>
        <groupId>com.graphql-java-kickstart</groupId>
        <artifactId>graphql-spring-boot-starter</artifactId>
        <version>${graphql-spring-starter.version}</version>
    </dependency>

有了这个,我们将使用 /graphql 端点公开我们的 graphql API。我想要有多个这样的端点,/graphql1 和 /graphql2 以便我可以根据端点定义不同的响应格式。最好的方法是什么?非常感谢任何意见。

它只是归结为创建一个 GraphQLHttpServlet 并配置其上下文路径。在幕后,它使用自动配置 GraphQLWebAutoConfigurationGraphQLHttpServlet 定义为 bean,并将上下文路径配置为 /graphql.

这意味着您可以参考 GraphQLWebAutoConfiguration 的工作方式并创建另一个注册到其他上下文路径的 GraphQLHttpServlet 实例。

要点是要在 spring 引导中注册一个 Servlet,您可以简单地创建一个 ServletRegistrationBean 来包装您要创建的 HttpServlet。有关详细信息,请参阅 docs

一个简单的例子是:

@Bean
public ServletRegistrationBean<AbstractGraphQLHttpServlet> fooGraphQLServlet() {
    //Create and configure the GraphQL Schema.
    GraphQLSchema schema = xxxxxxx;

    GraphQLHttpServlet graphQLHttpServlet = GraphQLHttpServlet.with(schema);
    ServletRegistrationBean<AbstractGraphQLHttpServlet> registration = new ServletRegistrationBean<>(
                    graphQLHttpServlet, "/graphql2/*");

    registration.setName("Another GraphQL Endpoint");
    return registration;
}