Spring GraphQL 1.0.0-M4 发布

发布 | Brian Clozel | 2021 年 12 月 14 日 | ...

Spring GraphQL 团队刚刚发布了 1.0.0 版本的第 4 个里程碑版本。感谢所有贡献者!

在这个里程碑版本中,我们进一步改进了注解编程模型,并扩展了之前里程碑版本中提供的 Spring Data 支持。

GraphQL 参数的接口投影

如果您熟悉 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 存储库的方法。有关更多详细信息,请参阅文档

GraphQL 参数的标准 Bean 验证

除了在模式级别执行的现有约束之外,您现在还可以使用标准 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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您快速提升技能。

了解更多

获得支持

Tanzu Spring 通过一个简单的订阅提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部