[9.x] Do not transform JsonSerializable
instances to array in HTTP client methods
#41077
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a follow-up of #41055.
Problem
When a class implements both
Arrayable
andJsonSerializable
, the former currently takes precedence. However, a class can have different forms forArrayable
andJsonSerializable
. For example, an empty hashmap should be an empty array in array form, but an empty object in JSON form i.e.{"attributes":{}}
. This is especially important if the endpoint always expects an object, even if it is empty. So I'd expect that if I post an object as JSON, and setup the correctjsonSerialize
method, it'll be serialized as such, not transformed to an array.Solution
This PR will skip transforming the request data, only in JSON body format, if it implements
JsonSerializable
and thus passes it 1:1 to Guzzle for JSON serialization.Change
Given the following class:
Before
After