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

    搞定!

  • 相关阅读:
    P1281 书的复制 dp
    P3402 最长公共子序列(nlogn)
    P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers
    P1202 黑色星期五
    P1205 方块转换
    [递推] hihocoder 1239 Fibonacci
    [二分] hihoCoder 1269 优化延迟
    [分治] POJ 3233 Matrix Power Series
    使用HTMLParser解析html
    CSAPP2e: Proxy lab 解答
  • 原文地址:https://www.cnblogs.com/cnsec/p/13407120.html
Copyright © 2011-2022 走看看