如何使用 Netflix DGS graphql-dgs-extended-scalars JSON 标量(java/spring-boot,maven)?

Posted

技术标签:

【中文标题】如何使用 Netflix DGS graphql-dgs-extended-scalars JSON 标量(java/spring-boot,maven)?【英文标题】:How to use Netflix DGS graphql-dgs-extended-scalars JSON scalar (java/spring-boot, maven)? 【发布时间】:2021-12-23 01:43:44 【问题描述】:

我遇到了我想使用 graphql-dgs-extended-scalars 的问题,特别是 JSON 标量,但找不到关于如何使用的清晰教程。我确定他们在那里,但以防万一有人发现自己处于与我相同的情况,希望我下面的简单解释可以为他们节省一些时间。

【问题讨论】:

【参考方案1】:

安装

在 pom 文件中(特定于 maven)

<dependency>
    <groupId>com.netflix.graphql.dgs</groupId>
    <artifactId>graphql-dgs-extended-scalars</artifactId>
    <version>$netflix.graphql.dgs.version</version>
</dependency>

在配置文件中(例如,application.yml)

dgs:
  graphql:
    extensions:
      scalars:
        objects:
          enabled: true

使用标量(本例中为 JSON)

在架构中

...
 
type SomeType 
    thing: JSON!

 
...
 
input SomeTypeInput 
    thing: JSON!

 
...
 
scalar JSON

在将用作数据提取器输入的类中

public class SomethingDTO

 
    /**
     * This does not have to be a Map, you could use another
     * reasonable object like JSONObject, etc.
     */
    public Map<String, Object> thing;
 

然后,您可以在任意形状的查询中将 json 格式的对象作为参数传入。

这仅适用于 JSON 标量,但该模式适用于 lib 中的大多数(全部?)其他标量。

【讨论】:

您使用的是哪个 DGS 版本?我正在运行 4.9.0,类型转换器尝试(但失败)将输入转换为字符串 我使用的是 4.5.1,所以我可能会遇到不愉快的意外。 感谢您提供版本号。稍后我会尝试测试它们。版本升级迫使我将 GQL 类型准确匹配到 java 类型(即 GQL 字符串在升级之前但不是在升级之后映射到 Java UUID),但由于我没有广泛使用 JSON 字段,它通过了。我认为当您决定升级时,请牢记这一点! @SimasJoneliunas 你找到解决这个问题的方法了吗? 我最终将所有 JSON 转换为字符串,然后在代码中手动处理反序列化。就我而言,时间投资不值得进一步挖掘。

以上是关于如何使用 Netflix DGS graphql-dgs-extended-scalars JSON 标量(java/spring-boot,maven)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Netflix DGS 解析器中获取标头信息

如何访问对象而不将其作为参数传递?

我们在采用GraphQL中学到了什么?

图例未绘制在图表中

GraphQL Federation:是不是有 Java Springboot 网关

如何使用来自 Netflix/Eureka 服务的发现信息在 Netflix/Zuul 和 Netflix/Ribbon 中启用自动路由?