微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

API 平台:在嵌套对象中忽略规范化上下文

如何解决API 平台:在嵌套对象中忽略规范化上下文

我有一个这样的 API 资源实体:

/**
 * @ApiResource(
 *     collectionoperations={},*     itemOperations={"get"},*     normalizationContext={"groups"={"read"}},* )
 */
class A
{
    /**
     * @var array<B>
     * @Groups("read")
     */
    private array $b;

    // ...
}

属性@Groups 注释有效,我只得到带有 @Groups("read") 的注释。

我有这样的嵌套对象:

class B
{
    /**
     * @var array<C>
     * @Groups("read")
     */
    private array $c;

    // ...
}

class C
{

    /**
     * @Groups("read")
     */
    private string $foo;

    private string $bar;

    // ...
}

B 中,@Groups 注释仍然受到尊重,但在 C 中,我获得了所有属性,完全忽略了注释。

预期输出如下:

{
  "b": [
    {
      "c": [
        {
          "foo": "This should be public"
        }
      ]
    }
  ]
}

得到如下输出

{
  "b": [
    {
      "c": [
        {
          "foo": "This should be public"
          "bar": "This should be private"
        }
      ]
    }
  ]
}

我需要做什么才能使这项工作发挥作用?

(如果重要的话,BC 都不是 @ApiResource,但 C 是 Doctrine @Entity。我使用自定义A)

的数据提供者

解决方法

我发现它... C 实现了 JsonSerializable,出于其他原因,来自 jsonSerialize() 的 JSON 表示包含 foobar。>

API 平台显然会利用它(如果存在)。学到了东西!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。