先行一步
VMware 提供培训和认证,助您快速进步。
了解更多Spring GraphQL 团队刚刚发布了 1.0.0 版本的第四个里程碑。感谢所有贡献者!
在此里程碑中,我们进一步改进了注解编程模型并扩展了在之前的里程碑中提供的 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 现在支持使用 Spring Data 的 Query by Example 扩展来进行数据抓取。要使用此扩展,您无需通过特定存储的查询语言编写查询,只需提供一个填充了字段的域对象示例即可。存储库实现将完成其余的工作!
QueryByExampleDataFetcher
使创建 DataFetcher
变得容易,它可以将 GraphQL 参数绑定到示例对象上,然后使用该对象来查询数据。还有一个基于 @GraphQlRepository
注解的 Query By Example 存储库的自动化发现功能,并可以映射到顶层 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 项目上提交问题。如果您有一般性问题,请在 stackoverflow.com 上使用 spring-graphql
标签提问。
项目主页 | GitHub | 问题 | 文档 | Stack Overflow