如何通过 ApiPlatform 保存 json 属性?

How to save json attribute via ApiPlatform?

<?php

/** 
 * @ApiResource(
 *     normalizationContext={"groups"={"fields_group:read"}},
 *     denormalizationContext={"groups"={"fields_group:write"}}
 * )
 */
class Entity 
{
    /**
     * @var array Settings.
     *
     * @ORM\Column(type="json", options={"comment":"Settings"})
     *
     * @Assert\NotBlank()
     * @Assert\Json()
     *
     * @Groups({"fields_group:read", "fields_group:write"})
     * @ApiProperty(
     *     attributes={
     *         "openapi_context"={
     *             "type"="object",
     *             "example"={"option":"value"}
     *         }
     *     }
     * )
     */
    private array $settings;

    /**
     * @return array
     */
    public function getSettings(): array
    {
        return $this->settings;
    }



    /**
     * @param array $settings
     *
     * @return self
     */
    public function setSettings(array $settings): self
    {
        $this->settings = $settings;

        return $this;
    }
}

请求

curl -X POST "https://localhost/api/entities" \
    -H  "accept: application/ld+json" \
    -H  "Content-Type: application/ld+json" \
    -d "{\"settings\":{\"option\":\"value\"}}"

回应

{
  "status": 400,
  "message": "Expected argument of type \"string\", \"array\" given"
}

如何通过 ApiPlatform 保存 json 属性?

Json 验证者有罪 https://github.com/symfony/validator/blob/v5.1.3/Constraints/JsonValidator.php#L37

这是多余的 ApiPlatform 将通过评论检查类型 @var array Settings