标签: graphql-java

Java GraphQL-将字段值传递给对象的解析器

我正在寻找使用其他对象类型将字段值传递给已解析的字段。

如果我有“客户>用户>个人资料”,则可以用另一种方式输入-如何将客户中的CustomerID字段值作为参数或变量传递给个人资料,以便正确解析?

java graphql graphql-java

2
推荐指数
1
解决办法
2741
查看次数

示例项目无法启动

配置文件

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import com.example.demo.resolver.Mutation;
import com.example.demo.resolver.Query;

import graphql.GraphQL;
import graphql.schema.GraphQLSchema;
import static com.coxautodev.graphql.tools.SchemaParser.newParser;

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private static Query query;

    @Autowired
    private static Mutation mutation;

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
        return bCryptPasswordEncoder;
    }

    @Autowired
    public GraphQL graphQL() {
        return GraphQL.newGraphQL(graphQLSchema())
                .build();
    }


    public static GraphQLSchema graphQLSchema(){
        return newParser()
                .file("schema.graphqls")
                .resolvers(query,mutation)
                .build()
                .makeExecutableSchema();
    }

}
Run Code Online (Sandbox Code Playgroud)

图式

type User {
  uid: Long!
  name: …
Run Code Online (Sandbox Code Playgroud)

mysql rethinkdb spring-boot graphql-java

2
推荐指数
1
解决办法
2362
查看次数

如何使用SPQR获取生成的方案文件.graphqls?

我真的很喜欢SPQR轻松地将与现有系统集成的方式,我唯一想看的是.graphqls文件,因此我可以在GraphQL语法上学习更多。

有没有一种方法可以从集成SPQR注释的现有代码中生成方案文件?

为了提供一些代码,让我们使用GitHub站点上的相同代码

实体:

public class User {

    private String name;
    private Integer id;
    private Date registrationDate;

    @GraphQLQuery(name = "name", description = "A person's name")
    public String getName() {
        return name;
    }

    @GraphQLQuery
    public Integer getId() {
        return id;
    }

    @GraphQLQuery(name = "regDate", description = "Date of registration")
    public Date getRegistrationDate() {
        return registrationDate;
    }
}
Run Code Online (Sandbox Code Playgroud)

服务等级:

class UserService {

    @GraphQLQuery(name = "user")
    public User getById(@GraphQLArgument(name = "id") Integer id) {
      ...
    }
} …
Run Code Online (Sandbox Code Playgroud)

java graphql-java graphql-spqr

2
推荐指数
1
解决办法
720
查看次数

使用grapiql的GraphQl变量 - 变量未定义

我正在使用这个端点:

 @PostMapping("graphql")
    public ResponseEntity<Object> getResource(@RequestBody Object query) { // String query
        ExecutionResult result;
        if (query instanceof String) {
            result = graphQL.execute(query.toString()); // if plain text
        } else{
            String queryString = ((HashMap) query).get("query").toString();
            Object variables = ((HashMap) query).get("variables");
            ExecutionInput input = ExecutionInput.newExecutionInput()
                    .query(queryString)
                    .variables((Map<String, Object>) variables) // "var1" -> "test1"
                    .build();

            result = graphQL.execute(input);
        }
        return new ResponseEntity<Object>(result, HttpStatus.OK);
    }
Run Code Online (Sandbox Code Playgroud)

当我没有变量时它工作正常:

query {
    getItem(dictionaryType: "test1") {
        code
        name
        description
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

当我添加variable它开始失败时,请参见此处:

query {
    getItem(dictionaryType: $var1) {
        code
        name …
Run Code Online (Sandbox Code Playgroud)

java graphql graphql-java graphiql

2
推荐指数
1
解决办法
3490
查看次数

GraphQL 如何支持 AND-OR 查询条件?

我是 GraphQL 的新手。有一个要求是从 CUSTOMERS 表中查询所有符合条件的数据,满足条件:GENDER == 'MALE' or 'AGE' >= 20。GQL 应该是什么样的?

graphql graphql-java

2
推荐指数
1
解决办法
1382
查看次数

GraphQL api 使用 spring boot Resttemplate 导致 {"errors":[{"message":"No query string is present"}]} 总是

目前我们想使用 resttemplate 在 springboot 应用程序中使用一个 graphQL 端点

但是,当我们使用以下查询发出 POST 请求时,我们总是收到相同的错误 {"errors":[{"message":"No query string was present"}]}

下面是片段,我们要运行,

    @Test
    public void testSwoop(){

        RestTemplate restTemplate = restTemplate();

        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Bearer *************");
        headers.add("content-type", "application/graphql");

        String query1 = "{\n" +
                "  \"query\": query {\n" +
                "    \"locationTypes\": {\n" +
                "      \"edges\": \n" +
                "        {\n" +
                "          \"node\": \n" +
                "        {\n" +
                "          \"name\"\n" +
                "        }\n" +
                "        }\n" +
                "    }\n" +
                "  }\n" +
                "}";

        String URL …
Run Code Online (Sandbox Code Playgroud)

java resttemplate spring-boot graphql-java

2
推荐指数
1
解决办法
5542
查看次数

带有 Spring 的 GraphQL-java - 解析器 vd datafetcher

GraphQL 和 Java (Spring) 一团糟。有多个项目,多个示例,但完全不一致。

我理解 Spring Boot 应该提供的是 OOTB 工作解决方案,并且(在某种程度上)它是这样工作的。为您提供此类体验的项目位于 Github https://github.com/graphql-java-kickstart 上。特别是https://github.com/graphql-java-kickstart/graphql-spring-boot让你可以创建模式,制作解析器,其他一切都是自动完成的。

问题是当您尝试用自定义 datafetcher 替换解析器(这看起来非常简单的 datafetcher)时。据我所知,不可能制作异步解析器或批量解析器 - 您必须制作 datafetcher。

要制作自定义数据提取器,需要进行自定义接线等,替换 spring-boot 解决方案,或以某种方式使用它(如何?)。没有一点是正确的,如何正确地做到这一点。我什至发现 BatchedDataFetcher 在它们获得良好的 Spring Boot 支持/示例之前已被弃用(!)(请参阅:GraphQL Java:使用 @Batched DataFetcher

正因为如此,我什至不知道去哪里寻找解决方案。我希望看到的是有一个例子,它有:

  • Spring Boot 支持
  • 异步/并行数据获取器
  • 批处理数据提取器
  • 使用 GraphQL 端点连接多个服务(可能超出范围)
  • 分页/过滤

spring-boot graphql graphql-java

2
推荐指数
1
解决办法
1386
查看次数

使用Android版Apollo graphql客户端?

我从波纹管样品中使用,但添加库时出现错误:

在Android上使用Apollo graphql客户端

贝娄是我的build.gradle (project)

    // Top-level build file where you can add configuration options common to all sub-projects/modules.

    buildscript {
        repositories {
            jcenter()
            maven { url "https://jitpack.io" }
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.3.1'
            classpath 'com.apollographql.android:gradle-plugin:0.1.0'
            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }

    allprojects {
        repositories {
            jcenter()
            mavenCentral()
        }
    }

    task clean(type: Delete) {
        delete rootProject.buildDir
    }
Run Code Online (Sandbox Code Playgroud)

贝娄是我的build.gradle (Module)

apply plugin: …
Run Code Online (Sandbox Code Playgroud)

android apollo graphql android-studio-2.3 graphql-java

1
推荐指数
1
解决办法
4017
查看次数

如何获取查询/突变操作名称

我是Spring Boot + GraphQL的新手。我需要在我的控制器类中获取查询/更改操作名称。

目的:需要某些用户的特定突变/查询操作的最高权限。在这里,用户类型将作为请求标头传递并得到验证,并检查是否允许用户访问该操作。

@PostMapping
public ResponseEntity<Object> callGraphQLService(@RequestBody String query, @RequestHeader("user") String userName) {
    ExecutionResult result = graphService.getGraphQL().execute(ExecutionInput.newExecutionInput()
            .query(query)
            .context(userName)
            .build());
    return new ResponseEntity<>(result, HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)

建议任何有效的机制来执行针对特定查询/突变的授权

java graphql graphql-java

1
推荐指数
1
解决办法
835
查看次数

我应该选择哪个 graphql-spring-boot-starter?

我正在考虑将 GraphQL 功能添加到我的 Spring Boot 应用程序中。

我发现有两个工件。

一个是com.graphql-java-kickstart:graphql-spring-boot-starter,另一个是com.graphql-java:graphql-spring-boot-starter

我应该选择哪一个?

spring-boot graphql graphql-java

1
推荐指数
1
解决办法
686
查看次数

在 Java 中美化 GraphQL 查询字符串

我有一个 Java 程序,除其他外,它从 XML 文件读取原始 GraphQL 查询并通过 HTTP 将它们发送到给定端点。问题是服务器只接受正确格式的 GraphQL 查询,这意味着不允许使用额外的空格、换行符等。所以基本上我必须将它们写在一行中,因为任何换行符都会通过添加大量空格来匹配 XML 层次结构(包含查询的元素不是根元素)来破坏整个查询。

正如您所知,单行查询,尤其是长查询,对人类不友好,而且难以阅读。到处都有很多代码格式化程序/美化程序,在线、IDEA、Postman、Insomnia 等内部,所有这些都可以通过单击按钮来完成。

工作 XML 文件(单行查询):

<request>
    <url>http://localhost:8080/graphql</url>
    <type>GRAPHQL</type>
    <body>mutation { login(input: {username: \"user\", password: \"12345\"}) {status}}</body>
</request>
Run Code Online (Sandbox Code Playgroud)

所需的XML文件(多行查询):

<request>
    <url>http://localhost:8080/graphql</url>
    <type>GRAPHQL</type>
    <body>
        mutation {
          login(input: {username: "user", password: "12345"}) {
            status
          }
        }
    </body>
</request>
Run Code Online (Sandbox Code Playgroud)

我该如何处理这种情况?在发送之前,我应该对“body”字符串进行格式化。是否有任何“美化”库,或者我应该编写自定义符号“删除器”?

java formatting graphql graphql-java

1
推荐指数
1
解决办法
3378
查看次数

如何在java中递归遍历graphql文档并找到它达到的最深层次

我的目标是遍历一个 graphql Java 文档对象并返回最大深度。

示例:深度 0

{
   name 
}
Run Code Online (Sandbox Code Playgroud)

示例:深度 1

{
   viewer{
     viewerId
   }
}
Run Code Online (Sandbox Code Playgroud)

示例:深度 2

{
   viewer{
     albums{
       albumId
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

示例:深度 2。如您所见,两张专辑/歌曲都在同一个父“观众”下

{
   viewer{
     albums{
       albumId
     }
     songs{
        songId
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

示例:深度 3

{
   viewer{
     albums{
       tracks{
          trackId
       }
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

我已经编写了基本代码来遍历它,但我的代码不适用于第二个版本的 depth = 2。它返回 depth = 3 而不是 2。原因是因为它在同一个父项下计数两次。本质上的逻辑是这样的:depth = depth + 1 每当一个字段有子项时。

import graphql.language.Document;
import graphql.language.Node;
import graphql.language.OperationDefinition;

public int checkDepthLimit(String query) {
    Document document;
    try {
        document = documentParser.parseDocument(query); …
Run Code Online (Sandbox Code Playgroud)

java recursion graphql graphql-java

0
推荐指数
1
解决办法
1171
查看次数

是否有推荐的库用于构建GraphQL查询?

我正在调用公开GraphQL接口的服务。因此,我能够发布GraphQL查询并通过curl接收回数据。现在,我想编写一个服务来为我构建查询(动态地,基于我发送端点的查询参数),并发送请求并返回响应。

我正在使用Spring Boot 2.1.4。

我知道您可以在Spring中使用弹性搜索库来构建查询。想知道GraphQL是否有类似的东西。

spring spring-boot graphql graphql-java

0
推荐指数
1
解决办法
128
查看次数