数据整合
Spring GraphQL 支持使用Querydsl通过 Spring Data Querydsl 扩展来获取数据。Querydsl 提供了一种灵活但类型安全的方法,通过使用注释处理器生成元模型来表达谓词。
公共接口 AccountRepository 扩展了 Repository,,>
}
然后用它来创建一个DataFetcher
:
DataFetcher dataFetcher =
DataFetcher> dataFetcher =
所述DataFetcher
构建一个QuerydslPredicate
从GraphQL请求参数,并使用它来获取数据。Spring Data支持QuerydslPredicateExecutor
JPA、MongoDB和LDAP。
Spring GraphQL 存储库中的 webmvc-http 示例使用 Querydsl 来获取artifactRepositories
。
Querydsl 允许集成Predicate
通过接受一个来自定义绑定到一个的请求QuerydslBinderCustomizer
。对于请求中的可用参数,请求参数默认绑定为“等于”。
自动注册
存储库必须使用@GraphQlRepository
。默认情况下,查询返回的 GraphQL 类型名称必须与存储库域类型的简单名称匹配。如果它们不匹配,您可以使用的typeName
属性@GraphQlRepository
来设置 GraphQL 类型名称。
安全
要应用更细粒度的安全性,Spring Security 中注释添加到涉及获取 GraphQL 响应的特定部分的服务方法,例如@PreAuthorize
或@Secured
。由于上下文传达使安全性和其他上下文在数据获取级别可用,因此应该是
测试
GraphQlTester
要创建GraphQlTester
,您只需要一个GraphQlService
,不需要传输:
.schemaResources(...)
。建造();
GraphQlService graphQlService = new ExecutionGraphQlService(graphQlSource);
WebGraphQlTester
如果没有 WebFlux,你可以支持你的 Spring 配置:
WebTestClient.bindToApplicationContext(上下文)
.baseUrl("/graphql")
WebGraphQlTester 测试器 = WebGraphQlTester.builder(client).build();
WebApplicationContext 上下文 = ... ;
WebTestClient 客户端 =
.configureClient()
。建造();
对于实时运行的服务器的测试:
WebTestClient.bindToServer()
。建造();
查询
字符串查询 = "{" +
" 发布 {" +
" }"+
"}";
graphQlTester.query(查询)
.path("project.releases[*].version")
.hasSizeGreaterThan(1);
错误
graphQlTester.query(查询)
.错误()
。核实()
.entityList(String.class)
错误过滤器可以注册并渗入所有测试:
.errorFilter(error -> ...)
或者直接检查所有错误,将它们标记为已过滤:
。执行()
.satisfy(错误 -> {
});
如果请求没有任何响应数据(例如状态),则使用executeAndVerify
代替execute
来验证响应中没有错误:
订阅
要测试订阅,您可以GraphQlTester
创建创建GraphQlService
,graphql.GraphQL
直接调用并返回响应流:
.executeSubscription()
Flux result = graphQlTester.query("订阅{问候}")
.toFlux("问候", String.class);
StepVerifier.create(result)
.expectNext("卓悦")
.verifyComplete();
要使用Web拦截链进行测试,您可以创建WebGraphQlTester
一个WebGraphQlHandler
:
.interceptor((input, next) -> next.handle(input))
WebGraphQlTester graphQlTester = WebGraphQlTester.builder(handler).build();
未完待续……
-
JAVA
+关注
关注
19文章
2966浏览量
104707 -
spring
+关注
关注
0文章
340浏览量
14340 -
GraphQL
+关注
关注
0文章
14浏览量
572
发布评论请先 登录
相关推荐
SSM框架的源码解析与理解
SSM开发环境的搭建教程 SSM与Spring Boot的区别
SSM框架在Java开发中的应用 如何使用SSM进行web开发
Spring 应用合并之路(二):峰回路转,柳暗花明
JavaWeb框架比较
Spring事务实现原理
![<b class='flag-5'>Spring</b>事务实现原理](https://file1.elecfans.com//web2/M00/0B/1B/wKgZomctcxKAXsmhAAEMko_SUCM423.png)
Spring Cloud Gateway网关框架
![<b class='flag-5'>Spring</b> Cloud Gateway网关框架](https://file1.elecfans.com/web2/M00/04/A6/wKgaombGkiKAAwa1AAE-bJwRAe8680.png)
vue+spring boot人员定位系统源码,实现实时定位、智慧调度、轨迹追踪
![vue+<b class='flag-5'>spring</b> boot人员定位系统源码,实现实时定位、智慧调度、轨迹追踪](https://file1.elecfans.com/web2/M00/01/43/wKgZoma0ZG2AdMnzAA7KFcPQfdw999.png)
玩转Spring状态机
![玩转<b class='flag-5'>Spring</b>状态机](https://file1.elecfans.com//web2/M00/F3/2C/wKgaomZ46Y6AHiVCAACxvB4H4AM171.png)
Saturday只是一个枚举元素啊,而today是一个枚举变量,为什么他俩所占的内存空间大小是一样的? [
使用Spring Boot 3.2虚拟线程搭建静态文件服务器
![使用<b class='flag-5'>Spring</b> Boot 3.2虚拟线程搭建静态文件服务器](https://file1.elecfans.com/web2/M00/BB/90/wKgZomWcowGAMzAHAAAm4u4lyMA264.png)
Spring状态机的实现原理和使用方法
![<b class='flag-5'>Spring</b>状态机的实现原理和使用方法](https://file1.elecfans.com/web2/M00/B8/F8/wKgZomWKL0yAUurlAAAaFjoNwKM559.png)
评论