數(shù)據(jù)整合
Spring GraphQL 支持使用Querydsl通過 Spring Data Querydsl 擴(kuò)展來獲取數(shù)據(jù)。Querydsl 提供了一種靈活但類型安全的方法,通過使用注釋處理器生成元模型來表達(dá)謂詞。
公共接口 AccountRepository 擴(kuò)展了 Repository,,>
}
然后用它來創(chuàng)建一個(gè)DataFetcher:
DataFetcher dataFetcher =
DataFetcher> dataFetcher =
所述DataFetcher構(gòu)建一個(gè)QuerydslPredicate從GraphQL請(qǐng)求參數(shù),并使用它來獲取數(shù)據(jù)。Spring Data支持QuerydslPredicateExecutorJPA、MongoDB和LDAP。
Spring GraphQL 存儲(chǔ)庫中的 webmvc-http 示例使用 Querydsl 來獲取artifactRepositories。
Querydsl 允許集成Predicate通過接受一個(gè)來自定義綁定到一個(gè)的請(qǐng)求QuerydslBinderCustomizer。對(duì)于請(qǐng)求中的可用參數(shù),請(qǐng)求參數(shù)默認(rèn)綁定為“等于”。
自動(dòng)注冊(cè)
存儲(chǔ)庫必須使用@GraphQlRepository。默認(rèn)情況下,查詢返回的 GraphQL 類型名稱必須與存儲(chǔ)庫域類型的簡單名稱匹配。如果它們不匹配,您可以使用的typeName屬性@GraphQlRepository來設(shè)置 GraphQL 類型名稱。
安全
要應(yīng)用更細(xì)粒度的安全性,Spring Security 中注釋添加到涉及獲取 GraphQL 響應(yīng)的特定部分的服務(wù)方法,例如@PreAuthorize或@Secured。由于上下文傳達(dá)使安全性和其他上下文在數(shù)據(jù)獲取級(jí)別可用,因此應(yīng)該是
測(cè)試
GraphQlTester
要?jiǎng)?chuàng)建GraphQlTester,您只需要一個(gè)GraphQlService,不需要傳輸:
.schemaResources(...)
。建造();
GraphQlService graphQlService = new ExecutionGraphQlService(graphQlSource);
WebGraphQlTester
如果沒有 WebFlux,你可以支持你的 Spring 配置:
WebTestClient.bindToApplicationContext(上下文)
.baseUrl("/graphql")
WebGraphQlTester 測(cè)試器 = WebGraphQlTester.builder(client).build();
WebApplicationContext 上下文 = ... ;
WebTestClient 客戶端 =
.configureClient()
。建造();
對(duì)于實(shí)時(shí)運(yùn)行的服務(wù)器的測(cè)試:
WebTestClient.bindToServer()
。建造();
查詢
字符串查詢 = "{" +
" 發(fā)布 {" +
" }"+
"}";
graphQlTester.query(查詢)
.path("project.releases[*].version")
.hasSizeGreaterThan(1);
錯(cuò)誤
graphQlTester.query(查詢)
.錯(cuò)誤()
。核實(shí)()
.entityList(String.class)
錯(cuò)誤過濾器可以注冊(cè)并滲入所有測(cè)試:
.errorFilter(error -> ...)
或者直接檢查所有錯(cuò)誤,將它們標(biāo)記為已過濾:
。執(zhí)行()
.satisfy(錯(cuò)誤 -> {
});
如果請(qǐng)求沒有任何響應(yīng)數(shù)據(jù)(例如狀態(tài)),則使用executeAndVerify代替execute來驗(yàn)證響應(yīng)中沒有錯(cuò)誤:
訂閱
要測(cè)試訂閱,您可以GraphQlTester創(chuàng)建創(chuàng)建GraphQlService,graphql.GraphQL直接調(diào)用并返回響應(yīng)流:
.executeSubscription()
Flux result = graphQlTester.query("訂閱{問候}")
.toFlux("問候", String.class);
StepVerifier.create(result)
.expectNext("卓悅")
.verifyComplete();
要使用Web攔截鏈進(jìn)行測(cè)試,您可以創(chuàng)建WebGraphQlTester一個(gè)WebGraphQlHandler:
.interceptor((input, next) -> next.handle(input))
WebGraphQlTester graphQlTester = WebGraphQlTester.builder(handler).build();
未完待續(xù)……
-
JAVA
+關(guān)注
關(guān)注
20文章
2997瀏覽量
115609 -
spring
+關(guān)注
關(guān)注
0文章
341瀏覽量
15762 -
GraphQL
+關(guān)注
關(guān)注
0文章
14瀏覽量
767
發(fā)布評(píng)論請(qǐng)先 登錄
一款基于Java+Spring Boot+Vue的智慧隨訪管理系統(tǒng)源碼
Spring攔截器:你的請(qǐng)求休想逃過我的五指山!
HarmonyOS5云服務(wù)技術(shù)分享--云緩存快速上手指南
銳寶智聯(lián)精彩亮相Japan IT Week Spring 2025
Spring AI接入DeepSeek:快速打造微應(yīng)用
基于javaPoet的緩存key優(yōu)化實(shí)踐
校園點(diǎn)餐訂餐外賣跑腿Java源碼

Spring認(rèn)證_什么是Spring GraphQL?
評(píng)論