GraphQL-Java二次开发

GraphQL-Java二次开发

Directive

Directive,指令,可以对Field\Type等类型进行标识,进行一些特殊功能,下面介绍几个常用的指令

计算指令 calc

通过calc指令,可以在服务端,实行对一些字段的自定义处理.其底层是利用解析Groovy脚本实现

    directive @calc ( pattern: String! ) on FIELD_DEFINITION | FIELD
    #学生信息
    type Student {
        id: ID
        name: String @calc(pattern : "${这个人的名字是name}")
    }

返回结果

    "Student": 
    {
        "name": "这个人的名字是Jack"
    }

源码实现


    public GraphQLFieldDefinition onField(SchemaDirectiveWiringEnvironment<GraphQLFieldDefinition> env) {
        GraphQLFieldDefinition field = env.getElement();
        GraphQLFieldsContainer parentType = env.getFieldsContainer();
        String groovyString = (String) env.getDirective().getArgument("pattern").getValue();
        DataFetcher originalFetcher = env.getCodeRegistry().getDataFetcher(parentType, field);
        DataFetcher dataFetcher = DataFetcherFactories
                .wrapDataFetcher(originalFetcher, ((dataFetchingEnvironment, value) -> {
                    JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(dataFetchingEnvironment.getSource()));
                    Map<String, Object> map = jsonObject.getInnerMap();
                    return GroovyUtil.calculate(groovyString, map);
                }));

        env.getCodeRegistry().dataFetcher(parentType, field, dataFetcher);
        return field;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值