diff --git a/src/State/Processor/ObjectMapperInputProcessor.php b/src/State/Processor/ObjectMapperInputProcessor.php index a99128e9aca..845be27e098 100644 --- a/src/State/Processor/ObjectMapperInputProcessor.php +++ b/src/State/Processor/ObjectMapperInputProcessor.php @@ -15,6 +15,7 @@ use ApiPlatform\Metadata\Operation; use ApiPlatform\State\ProcessorInterface; +use ApiPlatform\State\Util\StateOptionsTrait; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\ObjectMapper\ObjectMapperInterface; @@ -25,6 +26,8 @@ */ final class ObjectMapperInputProcessor implements ProcessorInterface { + use StateOptionsTrait; + /** * @param ProcessorInterface|null $decorated */ @@ -51,7 +54,8 @@ public function process(mixed $data, Operation $operation, array $uriVariables = } $request = $context['request'] ?? null; - $mapped = $this->objectMapper->map($data, $request?->attributes->get('mapped_data')); + $mapped = $this->objectMapper->map($data, $request?->attributes->get('mapped_data') ?? $this->getStateOptionsClass($operation, $operation->getClass())); + $request?->attributes->set('mapped_data', $mapped); return $this->decorated ? $this->decorated->process($mapped, $operation, $uriVariables, $context) : $mapped; } diff --git a/tests/Fixtures/TestBundle/ApiResource/MappedResource.php b/tests/Fixtures/TestBundle/ApiResource/MappedResource.php index 8b4092eabab..f2d9baa990f 100644 --- a/tests/Fixtures/TestBundle/ApiResource/MappedResource.php +++ b/tests/Fixtures/TestBundle/ApiResource/MappedResource.php @@ -23,6 +23,7 @@ stateOptions: new Options(entityClass: MappedEntity::class), normalizationContext: [ContextBuilder::HYDRA_CONTEXT_HAS_PREFIX => false], )] +#[Map(target: UnexpectedMappingTarget::class)] #[Map(target: MappedEntity::class)] final class MappedResource { diff --git a/tests/Fixtures/TestBundle/ApiResource/UnexpectedMappingTarget.php b/tests/Fixtures/TestBundle/ApiResource/UnexpectedMappingTarget.php new file mode 100644 index 00000000000..4f384a3b193 --- /dev/null +++ b/tests/Fixtures/TestBundle/ApiResource/UnexpectedMappingTarget.php @@ -0,0 +1,8 @@ +