diff --git a/src/ModelDescriber/JMSModelDescriber.php b/src/ModelDescriber/JMSModelDescriber.php index 2c4360647..cc6abf2c3 100644 --- a/src/ModelDescriber/JMSModelDescriber.php +++ b/src/ModelDescriber/JMSModelDescriber.php @@ -361,7 +361,10 @@ public function describeItem(array $type, OA\Schema $property, Context $context, $modelRef = $this->modelRegistry->register($model); $customFields = (array) $property->jsonSerialize(); - unset($customFields['property']); + unset( + $customFields['property'], + $customFields['nullable'], + ); if ([] === $customFields) { // no custom fields $property->ref = $modelRef; } else { diff --git a/tests/Functional/Entity/JMSUser.php b/tests/Functional/Entity/JMSUser.php index ba457d2de..0e3a9af43 100644 --- a/tests/Functional/Entity/JMSUser.php +++ b/tests/Functional/Entity/JMSUser.php @@ -13,6 +13,7 @@ use JMS\Serializer\Annotation as Serializer; use OpenApi\Attributes as OA; +use Symfony\Component\Validator\Constraints as Assert; /** * User. @@ -95,6 +96,11 @@ class JMSUser #[Serializer\Expose] private $bestFriend; + #[Serializer\Type(User::class)] + #[Serializer\Expose] + #[Assert\NotNull] + private ?User $notNullFriend = null; + /** * Whether this user is enabled or disabled. * diff --git a/tests/Functional/Fixtures/JmsOptOutController.json b/tests/Functional/Fixtures/JmsOptOutController.json index a0fe773ab..827284853 100644 --- a/tests/Functional/Fixtures/JmsOptOutController.json +++ b/tests/Functional/Fixtures/JmsOptOutController.json @@ -61,6 +61,9 @@ "VirtualTypeClassDoesNotExistsHandlerDefined": {}, "VirtualTypeClassDoesNotExistsHandlerNotDefined": {}, "JMSUser": { + "required": [ + "not_null_friend" + ], "properties": { "id": { "title": "userid", @@ -130,6 +133,9 @@ "best_friend": { "$ref": "#/components/schemas/User" }, + "not_null_friend": { + "$ref": "#/components/schemas/User" + }, "status": { "title": "Whether this user is enabled or disabled.", "description": "Only enabled users may be used in actions.", diff --git a/tests/Functional/JMSFunctionalTest.php b/tests/Functional/JMSFunctionalTest.php index c3b577e52..963de9b0e 100644 --- a/tests/Functional/JMSFunctionalTest.php +++ b/tests/Functional/JMSFunctionalTest.php @@ -143,6 +143,9 @@ public function testModelDocumentation(): void 'best_friend' => [ '$ref' => '#/components/schemas/User', ], + 'not_null_friend' => [ + '$ref' => '#/components/schemas/User', + ], 'status' => [ 'type' => 'string', 'title' => 'Whether this user is enabled or disabled.', @@ -215,6 +218,7 @@ public function testModelDocumentation(): void 'type' => 'integer', ], ], + 'required' => ['not_null_friend'], 'schema' => 'JMSUser', ], json_decode($this->getModel('JMSUser')->toJson(), true));