领先一步
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 现在支持使用 Spring Data 的按示例查询扩展来获取数据。要使用此扩展,您无需通过特定于存储的查询语言编写查询,而只需提供一个具有填充字段的域对象的示例。存储库实现将完成其余工作!
QueryByExampleDataFetcher
使创建将 GraphQL 参数绑定到示例对象并使用该对象查询数据的 DataFetcher
变得容易。还有一个功能可以根据 @GraphQlRepository
注解自动发现按示例查询存储库,并映射到顶级 GraphQL 查询。
如果您的首选数据存储支持,这将为您提供另一种在 Spring GraphQL 应用程序中利用 Spring Data 存储库的方法。有关更多详细信息,请参阅文档。
除了在模式级别执行的现有约束之外,您现在还可以使用标准 Bean 验证来验证声明为控制器方法参数的 GraphQL 参数。如果参数与定义的约束不匹配,则会抛出验证异常并将其写入 GraphQL 响应的相关“错误”部分。
@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 里程碑存储库中的新 Spring GraphQL 1.0.0-M4 版本中获取。
如果您有兴趣提供帮助,您可以开始使用 Spring GraphQL并在我们的 GitHub 项目上提出问题。如果您有任何一般性问题,请在stackoverflow.com 上使用spring-graphql
标签提问。
项目页面 | GitHub | 问题 | 文档 | Stack Overflow