Graphql 中的自定义标量-java

Custom Scalar in Graphql-java

我们计划在我们的应用程序中使用 Graphql 作为后端服务器。我们选择 Graphql-Java 来开发我们的 POC。我们遇到了创建我们自己的标量类型来处理 java.util.Map 对象类型的情况。

我们还没有找到任何关于创建自定义标量类型的文档。 在下面的示例代码中

RuntimeWiring buildRuntimeWiring() {
    return RuntimeWiring.newRuntimeWiring()
            .scalar(CustomScalar)

如何为 CustomScalar 对象完成实现。 需要帮助。

要大致了解如何制作标量,只需查看 the existing ones 并执行类似的操作。

graphql-java 还有一个用于额外标量的单独项目:graphql-java-extended-scalars. And there you can find the object scalar (a.k.a. JSON scalar),可用于动态结构,如 Maps.

通过以下方式注册:

RuntimeWiring.newRuntimeWiring().scalar(ExtendedScalars.Object)

在代码优先方法(SPQR v0.9.6)中添加 @GraphQLScalar 就足够了。 或者,作为替代方案,将标量定义添加到 GraphQLSchemaGenerator:

new GraphQLSchemaGenerator()
.withScalarMappingStrategy(new MyScalarStrategy())

并定义 MyScalarStrategy:

class MyScalarStrategy extends DefaultScalarStrategy {

@Override
public boolean supports(AnnotatedType type) {
  return super.supports(type) || GenericTypeReflector.isSuperType(MyScalarStrategy.class, type.getType());
}
}