问题描述
/**
* @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"
}
]
}
]
}
我需要做什么才能使这项工作发挥作用?
(如果重要的话,B
和 C
都不是 @ApiResource
,但 C
是 Doctrine @Entity
。我使用自定义A
)
解决方法
我发现它... C
实现了 JsonSerializable
,出于其他原因,来自 jsonSerialize()
的 JSON 表示包含 foo
和 bar
。>
API 平台显然会利用它(如果存在)。学到了东西!