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

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

【问题讨论】:

    标签: java spring-boot maven graphql netflix-dgs


    【解决方案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 转换为字符串,然后在代码中手动处理反序列化。就我而言,时间投资不值得进一步挖掘。
    猜你喜欢
    • 2023-02-02
    • 2021-07-14
    • 2021-06-22
    • 1970-01-01
    • 2019-12-05
    • 2021-06-17
    • 2021-07-14
    • 2022-07-06
    • 2022-07-27
    相关资源
    最近更新 更多