目前,我正在抛出RuntimeException
以返回GraphQL验证错误。它工作得出奇的好,除了在我的日志中用大堆栈跟踪抛出可怕的错误。
在这里,您可以看到我正在检查提交的新用户注册突变,以确保密码相互匹配,并且电子邮件地址尚未使用。
在GraphQL SPQR Spring Boot Starter中,正确的方法是什么。
@GraphQLMutation (name="register")
public User register(@GraphQLArgument(name="firstname") String firstname, @GraphQLArgument(name="lastname") String lastname, @GraphQLArgument(name="email") String email, @GraphQLArgument(name="msisdn") String msisdn, @GraphQLArgument(name="password") String password, @GraphQLArgument (name="confirmPassword") String confirmPassword) {
if (userRepo.findByEmail(email) != null) {
throw new RuntimeException("User already exists");
}
if (!password.equals(confirmPassword)) {
throw new RuntimeException("Passwords do not match");
}
User newUser = new User();
//...
return userRepo.save(newUser);
}
我不清楚你在问什么...但是我会假设您想要定制要记录的内容。
对于初学者,我建议使用一种专用的异常类型,如验证例外
,您可以以不同的方式捕获和处理。
至于日志记录,它可能发生在grapqh-java中,因为SPQR本身没有记录任何内容。默认情况下,graphql-java使用SimpleDataFetcherExceptionHandler
记录字段解析期间捕获的异常。
您现在有几个选项,您可以在SPQR中注册一个ResolverInterceptor
,它可以捕获验证异常并记录您想要的内容,并返回一个DataFetcherResult
,其中包含用户的错误消息。因为没有验证异常冒泡到graph ql-java,所以DataFetcherExceptionHandler
在这种情况下没有任何关系。
它看起来像:
public class ValidationInterceptor implements ResolverInterceptor {
@Override
public Object aroundInvoke(InvocationContext context, Continuation continuation) throws Exception {
try {
return continuation.proceed(context);
} catch (ValidationException e) {
log.warning(e);
return DataFetcherResult.newResult()
.error(GraphqlErrorBuilder
.newError(context.getResolutionEnvironment().dataFetchingEnvironment)
.message(e.getMessage()) //the message for the user
.build());
}
}
}
查看此处的答案,了解如何使用Spring Boot注册定制拦截器。
另一种选择是替换数据取藏器例外处理程序
图形ql-java使用。为此,您必须自己构造 GraphQL
对象并将其注册为 Bean。
@Bean
public GraphQL graphQL(GraphQLSchema schema) {
GraphQL.Builder builder = GraphQL.newGraphQL(schema)
.queryExecutionStrategy(new AsyncExecutionStrategy(customExceptionHandler))
.mutationExecutionStrategy(new AsyncSerialExecutionStrategy(customExceptionHandler));
return builder.build();
}
如果某处有一个Spring特性可以用于托管beans的异常处理,我也不会感到惊讶。
我已经将我的spring boot应用程序与graphql-spqr-spring-boot-starter https://github.com/leangen/graphql-spqr-spring-boot-starter集成在一起,我需要找到一种方法来禁用graph QL模式自省,因为这是生产中的一个安全问题。
尝试实现reactive graph ql并遇到一些问题。 pom相关性, 架构:- 分解器:- 这里,如果我返回Flux或Mono,得到以下错误。 所以,尝试作为列表返回。 但是使用阻塞调用将Flux转换为List也会抛出错误, 这里,得到下面的错误。 使用graphiql进行测试。 http://localhost:8089/graphiql
我正在使用库将现有的 Rest API 项目迁移到图形QL。我有一段代码,用于从获取当前的 : 但是,这将为图形 QL 返回空值。我认为这是正确的,因为对于 GraphQL,我们必须使用
我的Kotlin Android应用程序有问题。到目前为止我还没有用Kotlin写过这么大的项目,所以我完全不知道出了什么问题。 当我试图启动我的应用程序时,我重新设置了一堵红线墙。我找到了一些解决方案(针对Java)并试图将它们实现到我的代码中,但没有奏效。 [FIXED]我修复了我的错误(在第一个注释中指出),并从片段xml中删除工具:context=“.mainactivity”
问题内容: 我通过jQuery AJAX将一些数据发布到PHP脚本中,并且一切正常执行,但是返回了404错误。在我的Firebug控制台中,PHP脚本的响应是正确的。我不了解该脚本如何响应,它仍然会引发404错误。jQuery的“错误”回调方法将触发,而“成功”方法则不会触发。 PHP脚本执行的所有语句都能正常工作,因为我可以看到数据库正在更新等。 我在Dreamhost托管的WordPress
我已经阅读了很多Java8可选版本,我确实理解这个概念,但在我的代码中尝试实现它时仍然会遇到困难。 虽然我在网上搜索了一些好的例子,但我没有找到一个解释得很好的例子。 我有下一个方法: 这个简单的方法通过传递文件路径来返回文件的md5。正如您所注意到的,如果文件路径不存在(或键入错误),将抛出NoSuchFileException,该方法返回Null。 我希望使用Optional,而不是返回nul