シノニザとアノテーションの検証との組み合わせで問題が発生しました。 私はこのようなJSONを得た:Symfonyシリアライザはアノテーションでの検証では機能しません
{
"name": "A name",
"company": {
"name": "A company name"
}
}
そして、私のDTO:
class DTO {
/**
* @var string
*
* @Assert\NotNull
*/
private $name;
/**
* @var Company
*
* @Assert\NotNull
*/
private $company;
public function getName(): string {
return $this->name;
}
public function setName(string $name) {
$this->name = $name;
}
public function getCompany(): Company {
return $this->company;
}
public function setCompany(Company $company) {
$this->company = $company;
}
}
// deserialization in controller
$data = $request->request->all();
$serializer->deserialize($data, DTO::class, 'json');
デシリアライゼーションの後、私は、プロパティname
とDTO
のオブジェクトが正しく設定され得るが、company
はarray
とCompany
のではないオブジェクトであります。注釈を介してバリデーションを削除すると、デシリアライズが正しく行われます。
ドキュメント: https://symfony.com/doc/current/components/serializer.html#deserializing-an-object
任意のアイデア?ドキュメントのRecursive Denormalizationセクションから
私は確かに標準版を使用していたこのケースでは、そのようにそれを非正規化することができます。問題は、私がDTOの私の属性のいくつかのためにデフォルト値を提供したことだと思います。これらを削除すると直ちに、デシリアライズが正常に機能しました。 – Marco