Graphql-java中的自定义标量

时间:2017-09-04 10:10:16

标签: java graphql graphql-java

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

graphql-java还有一个单独的项目用于额外的标量:graphql-java-extended-scalars。在那里,您可以找到可用于动态结构的object scalar (a.k.a. JSON scalar),例如Map s。

通过以下方式注册:

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

答案 1 :(得分:0)

在代码优先方法(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());
}
}