领先一步
VMware 提供培训和认证,助您加速进步。
了解更多Spring GraphQL 团队刚刚发布了 1.0.0 版本发布的第 4 个里程碑。感谢所有贡献者!
在此里程碑中,我们进一步改进了注解编程模型,并扩展了在之前的里程碑中提供的 Spring Data 支持。
如果您熟悉 Spring Data 的接口式投影,那么这项新功能对您来说将非常有意义:您可以使用一个定义良好的接口来处理 GraphQL 参数,而无需任何对象实现。
例如
@Controller
public class BookController {
@MutationMapping
public Book addBook(@Argument BookInputProjection bookInput) {
// ...
}
}
@ProjectedPayload
interface BookInputProjection {
String getName(); // this maps to "name" argument
@Value("#{target.author + ' ' + target.name})
String getAuthorAndName();
}
您可以在文档的@ProjectedPayload 接口部分了解更多关于此功能的信息。
Spring GraphQL 现在支持使用按示例查询(Query by Example)的 Spring Data 扩展来进行数据获取。要使用此扩展,您无需通过特定于存储的查询语言编写查询,只需提供一个填充了字段的领域对象的示例即可。存储库实现将完成其余的工作!
QueryByExampleDataFetcher 可以轻松创建 DataFetcher,它将 GraphQL 参数绑定到示例对象,然后使用该对象进行数据查询。还有一个功能是基于 @GraphQlRepository 注解自动发现按示例查询的存储库,并将其映射到顶级 GraphQL 查询。
如果您的首选数据存储支持此功能,那么您可以为 Spring GraphQL 应用程序提供另一种利用 Spring Data 存储库的方式。有关更多详细信息,请参阅文档。
除了在模式级别强制执行的现有约束之外,您现在还可以使用标准 Bean 验证来验证声明为控制器方法参数的 GraphQL 参数。如果参数不符合定义的约束,将抛出验证异常,并写入 GraphQL 响应的相应“errors”部分。
@Controller
public class BookController {
@MutationMapping
public Book addBook(@Argument @Valid BookInput bookInput) {
// ...
}
}
public class BookInput {
@NotNull
private String title;
@NotNull
@Size(max=13)
private String isbn;
}
这类似于 Spring MVC 或 Spring WebFlux 中现有的支持,您可以在参考文档的@Argument 验证部分了解更多信息。
新的 @ContextValue 注解提供了从控制器方法方便地访问 GraphQLContext 中值的途径。
控制器方法可以通过声明类型为 javax.security.Principal 的方法参数来访问已认证的用户。
@BatchMapping 方法可以访问与 @SchemaMapping 方法和任何 DataFetcher 相同的 GraphQLContext。
更多改进和修复已包含在本次发布中,您现在可以在 Spring Milestone 存储库中获得新的 Spring GraphQL 1.0.0-M4 版本。
如果您有兴趣提供帮助,您可以开始使用 Spring GraphQL,并在我们的 GitHub 项目上提出问题。如果您有一般性问题,请使用spring-graphql 标签在stackoverflow.com上提问。
项目主页 | GitHub | 问题 | 文档 | Stack Overflow