Skip to content

Commit 0073a2a

Browse files
fix(serializer): json non-resource intermittent class (HAL & JSON:API) (#6231)
1 parent 818b9cd commit 0073a2a

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

Diff for: features/issues/5926.feature

+24
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,27 @@ Feature: Issue 5926
1010
Then the response status code should be 200
1111
And the response should be in JSON
1212
And the header "Content-Type" should be equal to "application/json; charset=utf-8"
13+
14+
@!mongodb
15+
Scenario: Create and retrieve a JSON:API WriteResource
16+
When I add "Accept" header equal to "application/vnd.api+json"
17+
And I send a "GET" request to "/test_issue5926s/1"
18+
Then the response status code should be 200
19+
And the response should be in JSON
20+
And the header "Content-Type" should be equal to "application/vnd.api+json; charset=utf-8"
21+
22+
@!mongodb
23+
Scenario: Create and retrieve a LD+JSON WriteResource
24+
When I add "Accept" header equal to "application/ld+json"
25+
And I send a "GET" request to "/test_issue5926s/1"
26+
Then the response status code should be 200
27+
And the response should be in JSON
28+
And the header "Content-Type" should be equal to "application/ld+json; charset=utf-8"
29+
30+
@!mongodb
31+
Scenario: Create and retrieve a HAL WriteResource
32+
When I add "Accept" header equal to "application/hal+json"
33+
And I send a "GET" request to "/test_issue5926s/1"
34+
Then the response status code should be 200
35+
And the response should be in JSON
36+
And the header "Content-Type" should be equal to "application/hal+json; charset=utf-8"

Diff for: src/Hal/Serializer/ItemNormalizer.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,9 @@ public function normalize(mixed $object, ?string $format = null, array $context
6161
return parent::normalize($object, $format, $context);
6262
}
6363

64-
if ($this->resourceClassResolver->isResourceClass($resourceClass)) {
65-
$resourceClass = $this->resourceClassResolver->getResourceClass($object, $context['resource_class'] ?? null);
64+
$previousResourceClass = $context['resource_class'] ?? null;
65+
if ($this->resourceClassResolver->isResourceClass($resourceClass) && (null === $previousResourceClass || $this->resourceClassResolver->isResourceClass($previousResourceClass))) {
66+
$resourceClass = $this->resourceClassResolver->getResourceClass($object, $previousResourceClass);
6667
}
6768

6869
$context = $this->initContext($resourceClass, $context);

Diff for: src/JsonApi/Serializer/ItemNormalizer.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,9 @@ public function normalize(mixed $object, ?string $format = null, array $context
8383
return parent::normalize($object, $format, $context);
8484
}
8585

86-
if ($this->resourceClassResolver->isResourceClass($resourceClass)) {
87-
$resourceClass = $this->resourceClassResolver->getResourceClass($object, $context['resource_class'] ?? null);
86+
$previousResourceClass = $context['resource_class'] ?? null;
87+
if ($this->resourceClassResolver->isResourceClass($resourceClass) && (null === $previousResourceClass || $this->resourceClassResolver->isResourceClass($previousResourceClass))) {
88+
$resourceClass = $this->resourceClassResolver->getResourceClass($object, $previousResourceClass);
8889
}
8990

9091
if (($operation = $context['operation'] ?? null) && method_exists($operation, 'getItemUriTemplate')) {

0 commit comments

Comments
 (0)