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

    搞定!

  • 相关阅读:
    CSS旧版flex及兼容
    深入理解CSS弹性盒模型flex
    CSS文本方向
    文本溢出text-overflow和文本阴影text-shadow
    深入理解CSS中的空白符和换行
    CSS中常见的6种文本样式
    理解CSS相对定位和固定定位
    CSS绝对定位的应用
    深入理解CSS绝对定位absolute
    深入理解CSS中的margin负值
  • 原文地址:https://www.cnblogs.com/cnsec/p/13407120.html
Copyright © 2011-2022 走看看