Properly encode exploded query params in url (#11682)

This commit is contained in:
Sorin Florea 2022-02-22 10:33:36 +02:00 committed by GitHub
parent 79970228e6
commit 7dcfe62dee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 90 additions and 0 deletions

View File

@ -318,7 +318,19 @@ public class {{classname}} {
}
{{/isDeepObject}}
{{^isDeepObject}}
{{#isExplode}}
{{#hasVars}}
{{#vars}}
localVarQueryParams.addAll(ApiClient.parameterToPairs("{{baseName}}", {{paramName}}.{{getter}}()));
{{/vars}}
{{/hasVars}}
{{^hasVars}}
localVarQueryParams.addAll(ApiClient.parameterToPairs("{{baseName}}", {{paramName}}));
{{/hasVars}}
{{/isExplode}}
{{^isExplode}}
localVarQueryParams.addAll(ApiClient.parameterToPairs("{{baseName}}", {{paramName}}));
{{/isExplode}}
{{/isDeepObject}}
{{/collectionFormat}}
{{/queryParams}}

View File

@ -1276,4 +1276,37 @@ public class JavaClientCodegenTest {
TestUtils.assertFileContains(Paths.get(output + "/src/main/java/xyz/abcdef/ApiClient.java"),
"public static String urlEncode(String s) { return URLEncoder.encode(s, UTF_8).replaceAll(\"\\\\+\", \"%20\"); }");
}
/**
* See https://github.com/OpenAPITools/openapi-generator/issues/4808
*/
@Test
public void testNativeClientExplodedQueryParamObject() throws IOException {
Map<String, Object> properties = new HashMap<>();
properties.put(CodegenConstants.API_PACKAGE, "xyz.abcdef.api");
File output = Files.createTempDirectory("test").toFile();
output.deleteOnExit();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
.setLibrary(JavaClientCodegen.NATIVE)
.setAdditionalProperties(properties)
.setInputSpec("src/test/resources/3_0/issue4808.yaml")
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
final ClientOptInput clientOptInput = configurator.toClientOptInput();
DefaultGenerator generator = new DefaultGenerator();
List<File> files = generator.opts(clientOptInput).generate();
Assert.assertEquals(files.size(), 38);
validateJavaSourceFiles(files);
TestUtils.assertFileContains(Paths.get(output + "/src/main/java/xyz/abcdef/api/DefaultApi.java"),
"localVarQueryParams.addAll(ApiClient.parameterToPairs(\"since\", queryObject.getSince()));",
"localVarQueryParams.addAll(ApiClient.parameterToPairs(\"sinceBuild\", queryObject.getSinceBuild()));",
"localVarQueryParams.addAll(ApiClient.parameterToPairs(\"maxBuilds\", queryObject.getMaxBuilds()));",
"localVarQueryParams.addAll(ApiClient.parameterToPairs(\"maxWaitSecs\", queryObject.getMaxWaitSecs()));"
);
}
}

View File

@ -0,0 +1,45 @@
openapi: 3.0.3
info:
title: Issue 11242 - exploded query params
description: "Exploded query params"
version: "1.0.0"
servers:
- url: localhost:8080
paths:
/api:
get:
operationId: GetSomeValue
parameters:
- in: query
name: QueryObject
explode: true
style: form
schema:
type: object
properties:
since:
type: string
sinceBuild:
type: string
maxBuilds:
type: integer
maxWaitSecs:
type: integer
responses:
'200':
description: Some return value
content:
application/json:
schema:
$ref: '#/components/schemas/SomeReturnValue'
example:
someValue: value
components:
schemas:
SomeReturnValue:
type: object
required:
- someValue
properties:
someValue:
type: string