diff --git a/src/Hydra/Serializer/ErrorNormalizer.php b/src/Hydra/Serializer/ErrorNormalizer.php index febf2908d99..448cf6c5060 100644 --- a/src/Hydra/Serializer/ErrorNormalizer.php +++ b/src/Hydra/Serializer/ErrorNormalizer.php @@ -76,7 +76,9 @@ public function supportsNormalization(mixed $data, string $format = null, array return false; } - return self::FORMAT === $format && ($data instanceof \Exception || $data instanceof FlattenException); + $decoration = $this->itemNormalizer ? $this->itemNormalizer->supportsNormalization($data, $format, $context) : true; + + return self::FORMAT === $format && ($data instanceof \Exception || $data instanceof FlattenException) && $decoration; } public function getSupportedTypes($format): array diff --git a/src/JsonApi/Serializer/ErrorNormalizer.php b/src/JsonApi/Serializer/ErrorNormalizer.php index 835a9ec0da4..110667b6df4 100644 --- a/src/JsonApi/Serializer/ErrorNormalizer.php +++ b/src/JsonApi/Serializer/ErrorNormalizer.php @@ -77,7 +77,9 @@ public function supportsNormalization(mixed $data, string $format = null, array return false; } - return self::FORMAT === $format && ($data instanceof \Exception || $data instanceof FlattenException); + $decoration = $this->itemNormalizer ? $this->itemNormalizer->supportsNormalization($data, $format, $context) : true; + + return self::FORMAT === $format && ($data instanceof \Exception || $data instanceof FlattenException) && $decoration; } public function getSupportedTypes($format): array diff --git a/src/Problem/Serializer/ErrorNormalizer.php b/src/Problem/Serializer/ErrorNormalizer.php index c1da53e12c1..13d764fa11c 100644 --- a/src/Problem/Serializer/ErrorNormalizer.php +++ b/src/Problem/Serializer/ErrorNormalizer.php @@ -75,7 +75,9 @@ public function supportsNormalization(mixed $data, string $format = null, array return false; } - return (self::FORMAT === $format || 'json' === $format) && ($data instanceof \Exception || $data instanceof FlattenException); + $decoration = $this->itemNormalizer ? $this->itemNormalizer->supportsNormalization($data, $format, $context) : true; + + return (self::FORMAT === $format || 'json' === $format) && ($data instanceof \Exception || $data instanceof FlattenException) && $decoration; } public function getSupportedTypes($format): array diff --git a/tests/Symfony/Bundle/Test/ApiTestCaseTest.php b/tests/Symfony/Bundle/Test/ApiTestCaseTest.php index 4143e7385cf..1ca9df247a8 100644 --- a/tests/Symfony/Bundle/Test/ApiTestCaseTest.php +++ b/tests/Symfony/Bundle/Test/ApiTestCaseTest.php @@ -271,6 +271,20 @@ public function testGetMercureMessages(): void ); } + private function recreateSchema(array $options = []): void + { + self::bootKernel($options); + + /** @var EntityManagerInterface $manager */ + $manager = static::getContainer()->get('doctrine')->getManager(); + /** @var ClassMetadata[] $classes */ + $classes = $manager->getMetadataFactory()->getAllMetadata(); + $schemaTool = new SchemaTool($manager); + + @$schemaTool->dropSchema($classes); + @$schemaTool->createSchema($classes); + } + /** * @group legacy */ @@ -289,17 +303,9 @@ public function testExceptionNormalizer(): void $this->assertEquals($data['hello'], 'world'); } - private function recreateSchema(array $options = []): void + public function testMissingMethod(): void { - self::bootKernel($options); - - /** @var EntityManagerInterface $manager */ - $manager = static::getContainer()->get('doctrine')->getManager(); - /** @var ClassMetadata[] $classes */ - $classes = $manager->getMetadataFactory()->getAllMetadata(); - $schemaTool = new SchemaTool($manager); - - @$schemaTool->dropSchema($classes); - @$schemaTool->createSchema($classes); + $response = self::createClient([], ['headers' => ['accept' => 'application/json']])->request('DELETE', '/something/that/does/not/exist/ever'); + $this->assertResponseStatusCodeSame(404); } }