2

示例代码基于 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 帐户上找到。publishedAtofPostDateTime|null混合型。

  1. 让我困惑的是默认的序列化结果不能使用相同的Serializer组件反序列化。

  2. 如果可以在将对象序列化为 JSON 字符串时,全局Serializer配置组件以跳过值和空值(字符串、数组和集合),如 Java 世界中的 Jackson。null

4

0 回答 0