领先一步
VMware 提供培训和认证,助您加速进步。
了解更多我很高兴地宣布,Spring for GraphQL 2.0 的第一个里程碑版本现已发布。这一代构建于 Spring Framework 7.0 之上,并要求相同的基线升级。
Spring for GraphQL 现在需要 graphql-java 24.0,但我们仍在追踪即将发布的 25.0,作为这一代的潜在基线。25.0 版本可能会带来有趣的功能,包括 在核心引擎中完全支持请求取消。
我们遵循 Spring Framework 的步伐,升级到了 Kotlin 2.2.0。同样,spring-graphql 现在默认使用 Jackson 3.x,但仍然支持 Jackson 2.x 作为回退选项。如果您正在升级您的项目,请查看 此节,了解关于 Jackson 升级的主要更改。
我们已将其整个公共 API 应用了 JSpecify 注解。现在这应该有助于 IDE 为您提供一致的警告,避免在生产环境中使用 Spring for GraphQL 时出现 NullPointerExceptions。
如果您使用的是 Kotlin 2.1+,此类注解直接内嵌在 Kotlin 类型中并在编译时使用。spring-graphql 代码库上的可空性检查将在构建时自动执行。请与我们分享您的升级体验!
这个第一个里程碑发布了一些社区请求的新功能。
您是否曾经遇到过 GraphQL 架构中的类型属性,其语法与 Java 字段名不兼容,或与您的代码风格不一致?例如,一个输入类型像
input CreateProjectInput {
id: ID!
project_slug: String
}
GraphQlArgumentBinder 现在提供了将 GraphQL 参数映射到对象属性名的选项。您可以提供一个自定义函数来调整模式名称,使其符合您选择的样式。
// configure binding options for GraphQL
var options = GraphQlArgumentBinder.Options.create()
.nameResolver(name -> toCamelCase(name));
然后,您可以在 AnnotatedControllerConfigurer#setBinderOptions 上设置这些选项。
默认情况下,GraphQL 中的输入类型是可空的且可选的。输入值(或其任何字段)可以设置为 null 字面量,或者根本不提供。这种区别对于带有 mutation 的部分更新很有用,在这种情况下,底层数据也可以设置为 null 或保持不变。
在客户端,由于 Java 没有这种 present/null/omitted 的概念,我们无法正确地为 *Input 类型表示这一点。现在,在序列化请求变量时,我们支持输入类型上的 ArgumentValue<T> 类型。这得益于一个 Jackson 模块,并且 在“Optional input”部分中有记录。
DgsGraphQlClient 进行多查询DGS GraphQL 客户端允许在单个请求中发送多个查询,并提供了专用的合同。现在,使用 DgsGraphQlClient 可以实现这一点,因为您可以为单个请求交换链式调用多个 request()。有关更多信息,请参阅 参考文档。
这只是第一个里程碑,我们还有其他功能正在考虑中。我们还在考虑 GraphQL over HTTP 规范的最新更改,包括 HTTP 294 响应状态码用于部分响应。
我们正在 我们的 wiki 上整理所有发布说明;在此期间,请随时提出您的反馈和增强请求!
2.0.0-M1 现已可从 https://repo.spring.io 和 Maven Central 获取。
如果您有一般性问题,请在 stackoverflow.com 上使用 spring-graphql 标签提问。
项目页面 | GitHub | 问题 | 文档 | Stack Overflow