标签: graphql-java

从 GraphQL-Java 返回错误

我想验证用户在突变期间提供的输入,然后如果提供了一些无效字段则提供错误。

有一个问题可以在这里回答 GraphQL-JS 的问题

我想问这个关于使用 GraphQL-Java 实现的问题。

假设您有一个将数据发布到 API 服务器的表单。API 服务器验证输入并返回 JSON 对象。如果输入无效,则会返回如下所示的错误对象。

{errors: {field1: "is required"}}

使用 GraphQL 时我们如何处理和处理此类错误?应该如何以及在哪里实现数据验证(应该是 GraphQL 的一部分还是应该在每个解析函数中)?

java error-handling graphql graphql-java

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

用于 Java-GraphQL 服务器的 Java 中基于中继的分页

我已经使用GraphQL-Java-tools实现了一个基于 Java 的 GraphQL 服务器。现在我需要使用我拥有的 Java-GraphQL 服务器实现基于 Relay 的分页。

我在那里找不到任何有用的东西。任何人都可以帮我指出正确的地方来找到如何在 Java_GraphQL 服务器中实现基于中继的分页吗?

感谢期待。

java pagination relay graphql graphql-java

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

如何在 GraphQl-Java 中处理泛型类型?

我尝试使用以下解析器将我们的模型转换为 GraphQL 模式:

@Component
public class QueryResolver implements GraphQLQueryResolver {

    public List<Result> results;
}
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

类型 java.util.List 不能映射到 GraphQL 类型!由于 GraphQL-Java 在运行时处理擦除的类型,因此只有非参数化的类才能表示 GraphQL 类型。这允许在接口和联合类型中通过 java 类进行反向查找。

我如何解决这个问题,因为我需要使用泛型类型?

java graphql-java

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

GraphQL 是否以 Int 作为枚举

我试图在 GraphQL 模式中创建一个具有 Int 值的枚举类型,但失败了。我可能会错过文档中的某些内容。任何人都知道如何在枚举类型中实现 Int 值,如下所示?

enum IntValue {
  1
  2
  3
}
Run Code Online (Sandbox Code Playgroud)

graphql graphql-js graphql-java

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

无法使用 graphql-spring 初始化代理

我正在使用:graphql-spring-boot 和 graphql-java-tools 来实现。

电影.graphqls

type Movie {
    id: Short
    name: String
    poster: String
    releaseDate: String
    runtime: String
    storyline: String
    rated: String
    rating: String
    inserted: String
}


type Query {
    movies: [Movie]
    movie(id: ID!): Movie
}
Run Code Online (Sandbox Code Playgroud)

电影模型

@Entity
public class Movie {
    private Short id;
    private String name;
    private String poster;
    private Date releaseDate;
    private Time runtime;
    private String storyline;
    private String rated;
    private double rating;
    private Timestamp inserted;
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我与其他模型没有任何关系。最后是实现GraphQLQueryResolver 的

@Component
public class Query implements GraphQLQueryResolver …
Run Code Online (Sandbox Code Playgroud)

java spring-boot graphql graphql-java

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

Apollo 客户端无法连接到 GraphQL 服务器(http 调用无法执行)

我正在尝试设置一个简单的 Android 应用程序,该应用程序通过使用 Java GraphQL 的 Springboot 应用程序连接到我本地主机上设置的 GraphQL 服务器。使用 GraphiQL 我可以很好地查询。问题是当我尝试使用 Apollo Client 在我的应用程序中进行相同的查询时,我收到以下错误

 

“com.apollographql.apollo.exception.ApolloNetworkException:无法执行http调用”

 

我使用本教程通过 Springboot 设置 GraphQL 服务器并定义 GraphQL 模式。我依靠本教程来帮助设置应用程序。

早些时候我曾尝试通过我的网络浏览器访问服务器,但我会收到一条错误消息

 

“出现意外错误(类型=错误请求,状态=400)。所需的字符串参数‘查询’不存在”

 

所以我尝试了 Postman 并将在 GraphiQL 中工作的相同查询发送到本地主机并得到一个错误返回。这是使用 GET 请求完成的,所以我尝试了 POST 并且它像在 GraphiQL 中一样工作得很好。所以我认为由于某种原因,我通过 Springboot 设置的 GraphQL 服务器不能处理 GET 请求。我不知道这是因为我在设置时搞砸了一些东西,或者这就是 GraphQL 处理查询的方式,但如果有人能就此启发我,我将不胜感激。

 

无论如何,我设置了一个断点并逐步执行该应用程序,发现 Apollo 也通过 GET 请求发送查询,我假设这是此问题的根源。我犯了一个错误并误读了代码,我了解到它绝对不是发送 GET 请求,但问题仍然存在,我不知道为什么。

这是主要活动

private static final String BASE_URL = 
    "http://xxx.xxx.xxx.xxx:8080/graphql";
    private static final String TAG = "MainActivity";
    private TextView textBox;
    private Button queryButton;

    @Override
    protected …
Run Code Online (Sandbox Code Playgroud)

java android-studio graphql apollo-client graphql-java

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

如何为 graphql 创建自定义错误/异常处理程序?

所以,我一直在编写一个微服务,它使用 GraphQL 的 API 的 java 实现。GraphQL 对客户端提供的查询强制执行某种级别的验证。但是,如果在解决查询时出现问题,我已经看到 graphql 显示了暴露 micr 服务内部结构的消息。

我需要什么?一种处理从解析器函数抛出的所有异常/错误的方法,这样我就可以在 GraphQL 创建相应的响应之前清理异常/错误。

我查阅了官方文档和许多堆栈溢出问题,但没有找到任何关于处理的地方。如果我找到了,它们适用于以前的版本,不再受支持。

我提到的一些链接 - 1. https://www.howtographql.com/graphql-java/7-error-handling/ 2. GraphQL java 以 json 格式发送自定义错误 3. https://www.graphql-java .com/documentation/v13/execution/

我已经完成了以下事情,例如 -

创建自定义处理程序

@Bean
public GraphQLErrorHandler errorHandler() {
    return new CustomGraphQLErrorHandler();
}
Run Code Online (Sandbox Code Playgroud)
public class CustomGraphQLErrorHandler implements GraphQLErrorHandler {

    @Override
    public List<GraphQLError> processErrors(List<GraphQLError> errors) {
        List<GraphQLError> clientErrors = errors.stream()
                .filter(this::isClientError)
                .collect(Collectors.toList());

        List<GraphQLError> serverErrors = errors.stream()
                .filter(this::isSystemError)
                .map(GraphQLErrorAdapter::new)
                .collect(Collectors.toList());

        List<GraphQLError> e = new ArrayList<>();
        e.addAll(clientErrors);
        e.addAll(serverErrors);
        return e;
    }

    private boolean isSystemError(GraphQLError error) …
Run Code Online (Sandbox Code Playgroud)

java error-handling graphql graphql-java

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

在 graphql-spring-boot-starter 中使用内省查询而不进行身份验证

使用 graphql-spring-boot-starter 库https://github.com/graphql-java-kickstart/graphql-spring-boot,是否可以保护所有请求,但仅允许带有身份验证的 graphql 自省查询?

该项目已启用 Spring security 使用 OAuth2,因此每个请求都是安全的。

感谢您的任何提示或帮助。

spring-security spring-boot graphql graphql-java

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

如何使用 graphql-spqr 访问字段级 Graphql 指令

给定一个 graphql 查询

query @my (arg:1) {
  foo @my (arg:2) {
    bar @my (arg:3)
    foobar @my (arg:4)
  }
}
Run Code Online (Sandbox Code Playgroud)

和graphql服务器实现使用 graphql-spqr

query @my (arg:1) {
  foo @my (arg:2) {
    bar @my (arg:3)
    foobar @my (arg:4)
  }
}
Run Code Online (Sandbox Code Playgroud)
@GraphQLType(name="foo")
public class Foo{
   @GraphQLQuery(name="bar")
   public String bar;
   @GraphQLQuery(name="foobar")
   public String foobar;
}
Run Code Online (Sandbox Code Playgroud)
@GraphQLDirective(name="my", locations = {QUERY, FIELD} )
public class MyGraphqlDirective{
  @GraphqlInputField("arg")
  public int arg;
}
Run Code Online (Sandbox Code Playgroud)

我可以访问(arg:2)查询 foo(如果存在),(arg:1)如果不存在则回退。

但是,如果我想在 foo 和 foobar 字段上阅读它,我会遇到问题。

我想让它不可读,滥用@GraphqlContext每个领域。有没有更简单的方法可以在字段级别存档一些简单的逻辑(例如大写、语言环境、舍入、数字格式)。


还尝试过dataFetchingEnvironment.getSelectionSet().get().getSubField("edge/node/foo/bar").getSingleField().getDirective() …

java graphql graphql-java graphql-spqr

5
推荐指数
0
解决办法
312
查看次数

有没有办法使用 spring boot starter 应用程序 graphql-spring-boot-starter 公开 2 个 graphql 端点?

目前我们正在使用

    <dependency>
        <groupId>com.graphql-java-kickstart</groupId>
        <artifactId>graphql-spring-boot-starter</artifactId>
        <version>${graphql-spring-starter.version}</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

有了这个,我们将使用 /graphql 端点公开我们的 graphql API。我想要多个这样的端点,/graphql1 和 /graphql2,以便我可以根据端点定义不同的响应格式。最好的方法是什么?任何输入都受到高度赞赏。

graphql graphql-java

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