zoukankan      html  css  js  c++  java
  • GraphQL创建自定义标量ScalarType (基于Spring Boot)

    目前GraphQL还没有大规模在国内应用,所以文档较少,为方便大家解决问题,故整理了下在Spring Boot项目中创建GraphQL标量的步骤:

    (现假设你已经有一个spring boot + graphql环境,并且可以正常跑起来了,如果没有,请看本人之前的关于graphql搭建的博客)

    1. 比如你要新建一个DateTime的标量,新建一个DateTimeScalarType类,它需要继承GraphQLScalarType基类。请在构造函数中声明标量的名称,描述,以及序列化、转换值、validate相关的逻辑:

    @Component
    public class DateTimeScalarType extends GraphQLScalarType {
    
        private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm";
    
        public DateTimeScalarType() {
            super("DateTime", "DateTime value", new Coercing<Date, String>() {
                @Override
                public String serialize(Object o) {
                    Date date = (Date) o;
                    return DateUtil.format(date, DATE_FORMAT);
                }
    
                @Override
                public Date parseValue(Object o) {
                    String value = String.valueOf(o);
                    if ("null".equalsIgnoreCase(value) || "".equalsIgnoreCase(value)) {
                        return null;
                    }
                    try {
                        return DateUtils.parseDate(value, DATE_FORMAT);
                    } catch (ParseException e) {
                        e.printStackTrace();
                        return null;
                    }
                }
    
                @Override
                public Date parseLiteral(Object o) {
                    String value = String.valueOf(o);
                    if ("null".equalsIgnoreCase(value) || "".equalsIgnoreCase(value)) {
                        return null;
                    }
                    try {
                        return DateUtils.parseDate(value, DATE_FORMAT);
                    } catch (ParseException e) {
                        e.printStackTrace();
                        return null;
                    }
                }
            });
        }
    
    }

    2. 到resource目录下面,找到schema.graphqls文件,或者其他的graphqls文件,一定不要忘了在graphqls文件里面也声明一下ScalarType,不然会报错的,比如下面这样,声明完之后就可以在定义类型的时候使用了:

    scalar DateTime

    3. 启动项目,看看自定义的序列化机制起作用了没:

    搞定!

  • 相关阅读:
    【scala】定义变量和函数
    【python】self用法详解
    【Hive】自定义函数
    【Java】抽象类和接口
    Linux中的wheel用户组是什么?
    CentOS6.9切换root用户su root输入正确密码后一直提示Incorrect password,如何解决?
    CentOS7.X中使用yum安装nginx的方法
    Win10提示“因为文件共享不安全,所以你不能连接到文件共享”如何处理
    vim编辑器-多行加注释与去注释
    CentOS7.4用yum安装并配置MySQL5.7
  • 原文地址:https://www.cnblogs.com/cnsec/p/13407120.html
Copyright © 2011-2022 走看看