示例代码基于 Symfony 6 和 PHP 8.1。
我编写了一个测试来验证 RESTful API 端点/posts/{id}。
$client->jsonRequest('GET', $url);
$getByIdResponse = $client->getResponse();
echo("json response:::" . $getByIdResponse->getContent());
JSON 响应输出是这样的。
{
"id": "1ec8b1bc-7385-649e-b0ce-d762d4b219cb",
"title": "test title",
"content": "test content",
"status": "DRAFT",
"createdAt": "2022-02-11T09:19:56+00:00",
"publishedAt": null,
"tags": [],
"comments": []
}
请注意,publishedAt
响应 JSON 中的null
.
我尝试使用该serializer
组件将响应内容反序列化为Post
对象。
$getData = $this->getContainer()->get('serializer')->deserialize($getByIdResponse->getContent(), Post::class, "json");
运行测试时,我得到以下异常。
Symfony\Component\Serializer\Exception\NotNormalizableValueException :
Failed to denormalize attribute "publishedAt" value for class "App\Entity\Post":
Expected argument of type "DateTime", "null" given at property path "publishedAt".
示例代码可在我的 Github 帐户上找到。publishedAt
ofPost
是DateTime|null
混合型。
让我困惑的是默认的序列化结果不能使用相同的
Serializer
组件反序列化。如果可以在将对象序列化为 JSON 字符串时,全局
Serializer
配置组件以跳过值和空值(字符串、数组和集合),如 Java 世界中的 Jackson。null