You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I didn't check on earlier versions maybe it has never worked like I expect.
How to reproduce
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Exception\PartialDenormalizationException;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Normalizer\UidNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Uid\Uuid;
class Test
{
public array $uids;
public function __construct(Uuid ...$uids)
{
$this->uids = $uids;
}
}
$normalizers = [new UidNormalizer(), new ObjectNormalizer()];
$serializer = new Serializer($normalizers, [new JsonEncoder()]);
try {
$dto = $serializer->denormalize(
['uids' => [Uuid::v7()->toRfc4122(), '2024-01-15']],
Test::class,
'json',
[AbstractNormalizer::COLLECT_DENORMALIZATION_ERRORS => true]
);
} catch (PartialDenormalizationException $e) {
var_dump($e);
exit;
}
var_dump($dto);
Serializer will throw NotNormalizableValueException instead of PartialDenormalizationException and break collecting the normalization errors.
PHP Fatal error: Uncaught Symfony\Component\Serializer\Exception\NotNormalizableValueException: The data is not a valid "Symfony\Component\Uid\Uuid" string representation. in /home/projects/symfony-serializer/vendor/symfony/serializer/Exception/NotNormalizableValueException.php:32
Stack trace:
#0 /home/projects/symfony-serializer/vendor/symfony/serializer/Normalizer/UidNormalizer.php(81): Symfony\Component\Serializer\Exception\NotNormalizableValueException::createForUnexpectedDataType()
#1 /home/projects/symfony-serializer/vendor/symfony/serializer/Serializer.php(247): Symfony\Component\Serializer\Normalizer\UidNormalizer->denormalize()
#2 /home/projects/symfony-serializer/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php(480): Symfony\Component\Serializer\Serializer->denormalize()
#3 /home/projects/symfony-serializer/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php(647): Symfony\Component\Serializer\Normalizer\AbstractNormalizer->denormalizeParameter()
#4 /home/projects/symfony-serializer/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php(361): Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->denormalizeParameter()
#5 /home/projects/symfony-serializer/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php(243): Symfony\Component\Serializer\Normalizer\AbstractNormalizer->instantiateObject()
#6 /home/projects/symfony-serializer/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php(349): Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->instantiateObject()
#7 /home/projects/symfony-serializer/vendor/symfony/serializer/Serializer.php(227): Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->denormalize()
#8 /home/projects/symfony-serializer/index.php(34): Symfony\Component\Serializer\Serializer->denormalize()
#9 {main}
thrown in /home/projects/symfony-serializer/vendor/symfony/serializer/Exception/NotNormalizableValueException.php on line 32
Possible Solution
No response
Additional Context
No response
The text was updated successfully, but these errors were encountered:
sidz
changed the title
[Serializer] PartialDenormalizationException broken on
[Serializer] PartialDenormalizationException broken when denormalize array of values
Sep 16, 2024
Hey @sidz,
Thanks for reporting that!
I think the issue is rather occurring because your property is a variadic parameter.
I created a fix available here: #58306, does it solve your issue?
Symfony version(s) affected
6.4
Description
PartialDenormalizationException
should be thrown in casecollect_denormalization_errors
equal totrue
.But this is not true for the case when we're trying to denormalize array of values (for example UUIDs but it works for any case)
It happens as DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS is removed on the first iteration, see
symfony/src/Symfony/Component/Serializer/Serializer.php
Lines 214 to 236 in f91514d
I didn't check on earlier versions maybe it has never worked like I expect.
How to reproduce
Serializer will throw
NotNormalizableValueException
instead ofPartialDenormalizationException
and break collecting the normalization errors.Possible Solution
No response
Additional Context
No response
The text was updated successfully, but these errors were encountered: