Symfony 中的日期时间反序列化

问题描述 投票:0回答:1

我正在尝试在 API 端点中反序列化 JSON 对象,但遇到了一些问题。

我正在使用 #[MapRequestPayload] 属性和默认 SerializerInterface 实现。运行 Symfony 6.4

代码如下:

用户控制器端点

    #[Route('/{id}', name: 'update', methods: ['PUT'])]
    #[IsGranted(UserVoter::EDIT, subject: 'user')]
    public function updateUser(
        #[MapEntity] User $user,
        #[MapRequestPayload] UserRequest $userRequest,
    ): JsonResponse {
        dd($userRequest);
        $this->userService->updateUserByRequest($user, $userRequest);
        return $this->json(
            new UserResponse($user)
        );
    }

DTO 用户请求

readonly final class UserRequest
{
    // Assert validation truncated
    public string $firstName;

    public string $lastName;

    public ?bool $wishBirthday;

    public ?\DateTimeImmutable $birthday;

    public ?UserRole $role;
}

问题在于,在请求中发送时,生日和角色未正确反序列化。

当我发送此 JSON 时,我得到

422 ValidationFailedException: This value should be of type unknown.
。它甚至没有到达控制器中的
dd
调用。

{
    "firstName": "Jan",
    "lastName": "Mrázek",
    "wishBirthday": false,
    "birthDay": "2020-01-06"
}

我的问题是 - 这里到底发生了什么?我不认为这是由

#[MapRequestPayload]
直接造成的,但我怀疑
Serializer
和我的设置是罪魁祸首。

php symfony symfony6
1个回答
0
投票

当我试图解决这个问题时,我创建了一个新项目并尝试了一个最小的示例,类似于所讨论的示例。不过这个例子运行得很好,所以我在实际项目中尝试了以下方法:

  1. composer require symfony/serializer-pack
    - 由于某种原因,安装了 1 个软件包,但只有内容哈希在我的composer.lock 文件中发生了变化
  2. property_info: ~
     中删除了 
    framework.yaml

完全重启 symfony 服务器后,它就开始工作了。希望这可以帮助那些遇到同样问题的迷失的灵魂。

© www.soinside.com 2019 - 2024. All rights reserved.