ApiPlatform v3中ManyToOne关联为空时返回空数组而非空对象的问题
ApiPlatform v3中ManyToOne空关联字段的JSON:API返回问题
问题场景
在Symfony v7搭配ApiPlatform v3的项目里,所有ManyToOne关联字段使用application/vnd.api+json格式返回时:
- 关联存在时,返回正确的单对象引用:
... "image": { "data": { "type": "MediaObject", "id": "/api/media-objects/67" } }, ...
- 关联为空时,字段仍会被返回,且
data值为空数组:
... "image": { "data": [] }, ...
而ApiPlatform v2中,空关联的字段不会出现在返回结果中。
解答:这是可配置的预期行为
ApiPlatform v3调整了JSON:API格式下空关联字段的默认处理逻辑,并非Bug,可通过配置切换回v2的行为。
配置方案
全局配置(所有实体生效)
在config/packages/api_platform.yaml中添加JSON:API序列化上下文配置:
api_platform: formats: jsonapi: serializer: context: jsonapi_include_null_relationships: false
单个属性配置(覆盖全局规则)
在实体的关联字段上通过#[ApiProperty]注解单独设置:
use ApiPlatform\Metadata\ApiProperty; use Doctrine\ORM\Mapping as ORM; #[ORM\ManyToOne(targetEntity: MediaObject::class)] #[ApiProperty( serializationContext: [ 'jsonapi_include_null_relationships' => false ] )] private ?MediaObject $image = null;
配置说明
jsonapi_include_null_relationships参数的作用:
true(默认值):空关联字段会被保留,data设为空数组(符合JSON:API规范对空关系的定义)false:空关联字段不会出现在返回结果中,与ApiPlatform v2行为一致
内容的提问来源于stack exchange,提问作者Robin Jansen
相关产品推荐
相关产品推荐

