我不知道如何加载引用的资源,该资源由一个深度嵌套的属性与嵌套数据结构中更高层的属性相结合来标识。
给定这些类(getter和setter等)。省略,但你得到的想法):
class Resource {
int tenantId;
List<SubResource> subResources;
}
class SubResource {
String name;
int userId;
}
class Tenant {
int id;
String name;
}
class User {
int id;
String name;
}
这个GraphQL schema:
type Resource {
tenantName: String
subResources: [SubResource]
}
type SubResource {
userName
}
我可以使用如下方法解析ResourceController中的Resource.tenantName属性:
@SchemaMapping
public CompletableFuture<String> tenantName(Resource resource, DataLoader<Integer, Tenant> loader) {
return loader.load(resource.getTenantId()).thenApply(User::getName);
}
但是SubResource.userName ...当我需要tenantId和userId来查找userName时,我该如何执行此操作?这是我到目前为止所做的:
@SchemaMapping
public CompletableFuture<String> userName(SubResource subResource, DataLoader<TenantAndUserId, User> loader) {
// Look up tenant id - but how?
int tenantId = ???;
// TenantAndUserId just holds tenantId and userId properties
var key = new TenantAndUserId(tenantId, subResource.getUserId());
return loader.load(key).thenApply(User::getName);
}
1条答案
按热度按时间3pmvbmvn1#
我终于发现了如何使用localContext将tenantId传递给userName方法,所以以防其他人有同样的问题,我添加了以下内容:
然后userName方法可以像这样注入tenantId: