-
-
Notifications
You must be signed in to change notification settings - Fork 7.2k
Typescript-Angular: Fix several query parameters serialization issues #21949
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Typescript-Angular: Fix several query parameters serialization issues #21949
Conversation
23b4a3f
to
2804cf9
Compare
This notably fixes: - JSON query param serialisation - array serialisation with style=form and explode=true As the class HttpParams from Angular is specially designed for the mimetype: `application/x-www-form-urlencoded` it does not support the range of query parameters defined by the OpenAPI specification. To workaround this issue, this patch introduces a custom `OpenAPIHttpParams` class which supports a wider range of query param styles. Note that as `HttpClient` is used afterwards, the class `OpenApiHttpParams` has a method to convert it into a `HttpParams` from Angular with a no-op HttpParameterCodec to avoid double serialisation of the query parameters.
2804cf9
to
ad80f9f
Compare
Please also consider #20998, where query parameters are being serialized to JSON when it is not expected. |
Even without my changes, the following test succeeds Lines 63 to 68 in ca750c0
Could you provide a minimal OpenAPI specification so that I could reproduce it ? |
My comment wasn't feedback on your PR, as I haven't tested your implementation, but rather a hint for you to please consider that some folks want the inverse of the issue you're trying to solve (#21934 wants JSON, but doesn't get it, #20998 gets JSON, but doesn't want it). If your implementation already considers this, please disregard my comment :) |
Thanks for the clarification and I would be glad to fix another bug. However, your original issue does not contain an OpenAPI specification showing the problem. |
You're right, sorry, I thought there was a spec in there 🙈 |
This notably fixes:
The first commits of the patch introduces integration tests for query
parameters serialization in
samples/client/others/typescript-angular-v20
:They should be executed as part of CircleCI.
The last commit fixes the issue.
Fixes are in the following files:
As the class HttpParams from Angular is specially designed for the
mimetype:
application/x-www-form-urlencoded
it does not supportthe range of query parameters defined by the OpenAPI specification.
To workaround this issue, this patch introduces a custom
OpenAPIHttpParams
class which supports a wider range of query paramstyles.
Note that as
HttpClient
is used afterwards, the classOpenApiHttpParams
has a method to convert it into aHttpParams
fromAngular with a no-op HttpParameterCodec to avoid double serialization of
the query parameters.
Fixes #21934.
PR checklist
Commit all changed files.
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
fixes #123
present in the PR description)@TiFu (2017/07) @taxpon (2017/07) @sebastianhaas (2017/07) @kenisteward (2017/07) @Vrolijkx (2017/09) @macjohnny (2018/01) @topce (2018/10) @akehir (2019/07) @petejohansonxo (2019/11) @amakhrov (2020/02) @davidgamero (2022/03) @mkusaka (2022/04) @joscha (2024/10)