有没有办法使用 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
并配置其上下文路径。在幕后,它使用自动配置 GraphQLWebAutoConfiguration
将 GraphQLHttpServlet
定义为 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;
}
目前我们正在使用
<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
并配置其上下文路径。在幕后,它使用自动配置 GraphQLWebAutoConfiguration
将 GraphQLHttpServlet
定义为 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;
}