【问题标题】:Custom serialization of specific return type for DataFetcherDataFetcher 的特定返回类型的自定义序列化
【发布时间】:2022-03-10 18:29:59
【问题描述】:

我正在使用Spring for GraphQL(版本 2.7.0-M1)。

在我的域模型中,很多属性都返回一个对象Foo。该对象必须根据来自GraphQlContext 的可用数据序列化为字符串。所以架构看起来像:

  type Parent {
      code: String!
      foo: String
      ...
  }
  

使用@SchemaMapping 很容易做到这一点对于特定的父类型

@SchemaMapping(typeName = "Parent", field = "foo")
public String foo(Parent parent, DataFetchingEnvironment env) {
    var context = env.getGraphQlContext();
    return ... 
    

但是,这不是很干燥。我正在寻找一种将这段代码放在一个地方的方法,比如自定义标量。 有没有办法用 spring-graphql / graphql-java 做到这一点?

示例

一个例子是我们使用的Localized<T> 对象。例如,Product 实例具有标题和描述(以及更多)的 Localized<String> 属性。 对于 GraphQL 查询,我们可以设置上下文,上下文的一部分是Locale。对于所有Localized 属性值,该值可以转换为区域设置的字符串值。我们正在寻找一种自动执行此操作的方法。否则会创建很多样板代码

【问题讨论】:

    标签: spring-boot graphql-java spring-graphql


    【解决方案1】:

    @ContextValue 会帮忙吗?这将从您的控制器处理程序中删除一些样板。

    @SchemaMapping(typeName = "Parent", field = "foo")
    public String foo(Parent parent, @ContextValue Foo foo) {
    
    

    如果您想要更多涉及的内容,我认为您应该详细说明架构中一种或多种类型的属性与上下文中的一些随机值之间的确切关系。

    也许你可以在这里提出一些具体的例子?

    【讨论】:

    • 谢谢。是的@ContextValue 减少了样板,但并不是我的意思。请参阅示例更新问题。希望这很清楚
    猜你喜欢
    • 2014-06-08
    • 1970-01-01
    • 2023-03-14
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多