如何解决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"
}
]
}
]
}
我需要做什么才能使这项工作发挥作用?
(如果重要的话,B
和 C
都不是 @ApiResource
,但 C
是 Doctrine @Entity
。我使用自定义A
)
解决方法
我发现它... C
实现了 JsonSerializable
,出于其他原因,来自 jsonSerialize()
的 JSON 表示包含 foo
和 bar
。>
API 平台显然会利用它(如果存在)。学到了东西!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。