【发布时间】:2021-01-10 10:21:55
【问题描述】:
我的问题是:实现 resolving 方法时最好的方法是什么?直接调用数据存储库或回调一个主解析器,也就是一个实现GraphQLQueryResolver(只要它有适当的方法)?换句话说(见下面的例子),DataFetchingEnvironment 在回调主解析器时是否正确调整/设置?
注意:如果您不熟悉 Resolvers 如何使用 GraphQL Java 工具,我会让您看看 @https://www.graphql-java-kickstart.com/tools/schema-definition/
现在是例子。
在 Spring Boot 应用程序中,使用 GraphQL Java 工具(具有 graphql-spring-boot-starter 依赖项),让我们拥有以下架构:
type User {
id: ID
name: String
company: Company
}
type Company {
id: ID
name: String
}
具有匹配的 POJO 或实体(getter/setter 被省略):
class User {
private Long id;
private String name;
private Long idCompany;
}
class Company {
private Long id;
private String name;
}
以及这些解析器(注意:UserRepository 和 CompanyRepository 是您常用的 DAO/Repository 类的类,由 Spring Data (JPA)、其他东西或您自己的自定义实现提供支持,无论如何...):
QueryResolver implements GraphQLQueryResolver {
@Autowired
private UserRepository userRepository;
@Autowired
private CompanyRepository companyRepository;
public User user(String id) {
return userRepository.findById(id);
}
public Company company(String idCompany) {
return companyRepository.findById(idCompany);
}
}
UserResolver implements GraphQLResolver<User> {
@Autowired
private CompanyRepository companyRepository;
public Company company(User user) {
return companyRepository.findById(user.getIdCompany());
}
// ...or should I do:
@Autowired
private QueryResolver queryResolver;
public Company company(User user) {
return queryResolver.company(user.getIdCompany());
}
}
在每个方法的末尾添加 DataFetchingEnvironment environment 并在执行对各种(数据)存储库的调用之前使用它时(更)有意义。
继续上面的示例,这样做是否正确(即,DataFetchingEnvironment 在再次传输到主 QueryResolver 时是否会正确填充)?
UserResolver implements GraphQLResolver<User> {
@Autowired
private QueryResolver queryResolver;
public Company company(User user, DataFetchingEnvironment environment) {
return queryResolver.company(user.getIdCompany(), environment);
}
}
【问题讨论】:
-
据我所知应该没问题,因为你正在通过它
标签: spring-boot graphql graphql-java graphql-java-tools