GraphQL-Java用来向前端返回json数据

GraphQL

GraphQL是Facebook 开发的一种查询语言,用于在复杂的应用程序的数据模型中,描述数据要求。

官网:http://graphql.org/

GraphQL-Java:https://github.com/graphql-java/graphql-java

GraphQL这个词刚入我眼帘没多久,刚开始也只是看了一下简介而已。由于本人编程能力和知识储备不好,最近想用一个一个小项目来实践一下,采用Java语言写一个web项目,打算使用Java中对我来说全新的知识,经过细想后决定采用struts2框架+bootstrap框架(后台管理)+MUI框架(移动端),一边学习一边做项目,让自己在实践中获取到更多的知识。

在写到数据库连接的时候,本来是想用C3P0来管理数据库连接的,想起前两天在开源中国看到另一个数据库连接池HikariCP,数据显示它比C3P0性能更好,然后就采用了HikariCP,毕竟我这次的目的是学习新的知识,所以毅然用了它。

eclipse+maven(现学现用)+struts2(现学现用)+bootstrap(用过几次)+MUI(现学现用)

GraphQL-Java github示例代码:

import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLSchema;
import java.util.Map;

import static graphql.Scalars.GraphQLString;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
import static graphql.schema.GraphQLObjectType.newObject;

public class HelloWorld {

    public static void main(String[] args) {
        GraphQLObjectType queryType = newObject()
                .name("helloWorldQuery")
                .field(newFieldDefinition()
                        .type(GraphQLString)
                        .name("hello")
                        .staticValue("world"))
                .build();

        GraphQLSchema schema = GraphQLSchema.newSchema()
                .query(queryType)
                .build();

        GraphQL graphQL = GraphQL.newGraphQL(schema).build();

        Map<String, Object> result = graphQL.execute("{hello}").getData();
        System.out.println(result);
        // Prints: {hello=world}
    }
}

百度了GraphQL-Java的相关用法:http://blog.csdn.net/qq362228416/article/details/50854980

我把上面这为朋友的代码直接复制粘贴运行,发现无法得到正确的数据,打印出来的信息全是xxx=null,当时很纳闷,我这半桶水的知识对这百来行代码无法找出问题所在。然后只能尝试结合官方的示例代码和前面这位朋友的用法,尝试着写。

前期准备工作:写一个结构类

public class ZyVo {
//专业类
    private int    id, xy, readnum;
    private String code, title, text, jc, pic, general;
//.....getXXX,setXXX
}

然后编写GraphQL与上面这个类的结构对应信息:

//import graphql.Scalars;//相关包
GraphQLObjectType beanVo = newObject().name("zy")
                .field(newFieldDefinition().name("id").type(Scalars.GraphQLInt).build())//类型一定要与结构类字段的类型相对应
                .field(newFieldDefinition().name("xy").type(Scalars.GraphQLInt).build())
                .field(newFieldDefinition().name("code").type(Scalars.GraphQLString).build())
                .field(newFieldDefinition().name("title").type(Scalars.GraphQLString).build())
                .field(newFieldDefinition().name("jc").type(Scalars.GraphQLString).build())
                .field(newFieldDefinition().name("pic").type(Scalars.GraphQLString).build())
                .field(newFieldDefinition().name("general").type(Scalars.GraphQLString).build())
                .field(newFieldDefinition().name("text").type(Scalars.GraphQLString).build())
                .field(newFieldDefinition().name("readnum").type(Scalars.GraphQLInt).build())
                .build();

之后写一个对数据进行查询的东西(我也不知道怎么描述这个东西所以就称他为东西了)

GraphQLFieldDefinition findforid = GraphQLFieldDefinition.newFieldDefinition().name("zy")
                .argument(//这里用GraphQL些查询语句时传入的参数
                        newArgument()
                        .name("id")//参数名为id
                        .type(Scalars.GraphQLInt)//参数类型
                        .build()
                        )
                .type(beanVo)//绑定GraphQL的一个结构,就是上面的那段代码
                .dataFetcher(environment -> {
                    // 获取查询参数
                    int id = environment.getArgument("id");
                    ZyProxy zyProxy = new ZyProxy();//一个对ZyVo数据进行增删改查代理的操作类
                    ZyVo vo = null;
                    try {
                        vo = zyProxy.findById(id);//通过ID查找数据
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    System.out.println(vo);

                    return vo;
                }).build();

//我也不懂怎么称呼下面这个代码

GraphQLSchema schema = GraphQLSchema.newSchema()
                .query(newObject().name("GraphQuery")
                                               .field(findforid)//半桶水不知道怎么描述它
                                               .build()
                 )
                .build();

//写一条类似查询语句的东西,GraphQL会解析它然后返回相关的结果

String ghql = "{zy(id:1){id,title,readnum,text,pic,jc}}";
//最后就是获取结果了
ExecutionResult re = new GraphQL(schema).execute(ghql);
Map<String, Object> result1 = (Map<String, Object>) re.getData();
//把它打印出来
System.out.println(result1);//结果:{zy={id=1, title=服装与服饰设计, readnum=0, text=null, pic=null, jc=null}}
//可以把它加入到json对象中

JSONObject json = new JSONObject();
json.putAll(result1);
System.out.println(json);//输出就成了json数据了:{"zy":{"id":1,"title":"服装与服饰设计","readnum":0}}

至此我的目的达到了,灵活定制我想要的json数据,因为有时候有的字段并不想让前端看到,用这个方法感觉很方便。

当然,我打开它方式可能很不正确,恳请各位大神展示GraphQL-Java更多的用法,小白坐等。

目前我只用它来生成我想要的json数据,因为可以很方便的定制我想要的数据,而不用更改其他Java代码,只需要改一条字符串信息就行了。

时间: 2024-07-30 15:42:17

GraphQL-Java用来向前端返回json数据的相关文章

服务器-Java web返回JSON数据的封装问题

问题描述 Java web返回JSON数据的封装问题 我的服务器端返回JSON数据的格式是统一的,封装成JSONResponse这个类,其中data字段类型 为BaseModel,这是所有实体类的基类,但如果要返回一个对象的List而不是单个对象, 这种方式就不行了,请问如果还用一个字段,兼容List和单个对象两种情况,该怎么写? 谢谢 解决方案 Java Web返回JSONjava 返回json数据jQuery通过调用webservice返回json数据的问题 解决方案二: 全部都用List去

jQuery通过Ajax返回JSON数据

  jQuery通过Ajax返回JSON数据          最近在使用JQuery的ajax方法时,要求返回的数据为json数据,在处理的过程中遇到下面的几个问题,那就是采用不同的方式来生成json数据的时候,在$.ajax方法中应该是如何来处理的,下面依次来进行说明. 服务端PHP读取MYSQL数据,并转换成JSON数据,传递给前端Javascript,并操作JSON数据.本文将通过实例演示了jQuery通过Ajax向PHP服务端发送请求并返回JSON数据. JSON(JavaScript

json-图片上传返回JSON数据,前台弹出下载保存文件框, 文件里面是JSON数据,页面上没显示图片怎么解决

问题描述 图片上传返回JSON数据,前台弹出下载保存文件框, 文件里面是JSON数据,页面上没显示图片怎么解决 10C @RequestMapping(value = ""kinduploadfile"" method = RequestMethod.POST) public @ResponseBody JSONObject KindUploadFile(HttpServletRequest requestHttpServletResponse response)

web项目前端读取json数据不正常 ?

问题描述 web项目前端读取json数据不正常 ? 后台代码 @Override public String execute() throws Exception { Object obj=this.session.get(StaticString.ADMIN_INFO); Map<String, Object> map=new HashMap<String, Object>(); if(obj!=null){ AdminBean newAdmin =new AdminBean(t

jQuery通过Ajax向PHP服务端发送请求并返回JSON数据_AJAX相关

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解析和生成.JSON在前后台交互的过程中发挥着相当出色的作用. 服务端PHP读取MYSQL数据,并转换成JSON数据,传递给前端Javascript,并操作JSON数据.本文将通过实例演示了jQuery通过Ajax向PHP服务端发送请求并返回JSON数据.阅读本文的读者应该具备jQuery.Ajax.PHP相关知识,并能熟练运用. XHTML <ul id="use

jQuery Ajax+PHP返回JSON数据实例教程

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解析和生成.JSON在前后台交互的过程中发挥着相当出色的作用.请接着往下看教程. mysql表结构  代码如下 复制代码 CREATE TABLE IF NOT EXISTS `user` (    `id` int(11) NOT NULL auto_increment,    `username` varchar(100) NOT NULL,    `sex` var

解决spring mvc 返回json数据到ajax报错parseerror问题

最近使用ajax接收spring mvc传过来的json数据时总是出现parseerror的错误,错误源码如下: 前端: $.ajax({ type: 'POST', url: "groupFunctionEdit", dataType: 'json', contentType: "application/json", data: JSON.stringify(functiondata), success: function(data){ alert('数据加载成功

Struts2里的Action返回Json数据

  hibernateTemplate和hibernateDaoSupport的注意问题!   正则表达式入门30分钟 Struts2里的Action返回Json数据   2010-08-03 22:46:46|  分类: JAVA |  标签: |举报 |字号大中小 订阅 1.首先当然是加入json-plugin jar包 2.编写action public class UserAction extends ActionSupport implements ModelDriven<UserDT

Django返回json数据用法示例_python

本文实例讲述了Django返回json数据用法.分享给大家供大家参考,具体如下: 1.前端.jQuery发送GET请求,并解析json数据.getJSON方法可参考这里. url = "http://example/?question=" + question + "&rand=" + Math.random(); $.getJSON(url, function(json){ answer = json.answer; alert(answer); });