swagger-api / swagger-ui

Swagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.
https://swagger.io
Apache License 2.0
26.6k stars 8.96k forks source link

springdoc-openapi v2(swagger) request object query encoding issue #10113

Open aiden-sim opened 2 months ago

aiden-sim commented 2 months ago

After migrating from springdoc-openapi v1 to v2, we started experiencing issues with requests using a query param DTO. Previously, requests were structured as standard query parameters, but now they are being URL-encoded, leading to errors.

Here is an example of a swagger request object query:

{
  "searchType": "ACCOUNT_ID",
  "searchKeywords": [
    "12345"
  ],
  "types": [
    "NORMAL",
    "WITHDRAW"
  ]
}

With springdoc-openapi v1, the request URL looked like this:

http://localhost:8080/search?searchType=ACCOUNT_ID&searchKeywords=12345&types=NORMAL&types=WITHDRAW

However, after upgrading to springdoc-openapi v2, the request URL changed to the following (with the query parameters URL-encoded):

http://localhost:8080/search?searchType=ACCOUNT_ID&searchKeywords=%5B%2212345%22%5D&types=%5B%22NORMAL%22%2C%22WITHDRAW%22%5D

Decoded, it looks like:

http://localhost:8080/search?searchType=ACCOUNT_ID&searchKeywords=["12345"]&types=["NORMAL","WITHDRAW"]

Although the requests work fine when using curl, it seems to be an issue with the new version of springdoc-openapi v2(swagger). It doesn't appear to be a application problem.

How should we address this?

I am using org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0

RomaIvanovOfficial commented 1 month ago

We have same problem

RomaIvanovOfficial commented 1 month ago

Set @ParameterObject in method for DTO class