• 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. 启动项目,看看自定义的序列化机制起作用了没:

    搞定!

  • 相关阅读:
    python匹配中文和非中文
    Django mysql连接错误
    linux搭建postfix邮件服务器
    linux编译安装redis
    python将py文件打包成可运行的exe文件
    mysql表结构自动生成golang struct
    linux离线安装nginx+uwsgi
    Sass/Scss
    CSS变量和浏览器前缀
    CSS中常用的函数
  • 原文地址:https://www.cnblogs.com/cnsec/p/13407120.html
Copyright © 2020-2023  润新知