ISSUE-11242: Fix Java native path param encoding (#11257)

This commit is contained in:
Sorin Florea
2022-01-10 15:23:28 +02:00
committed by GitHub
parent d813d04f46
commit a4325ec520
5 changed files with 71 additions and 4 deletions

View File

@@ -76,7 +76,7 @@ public class ApiClient {
* @return URL-encoded representation of the input string.
*/
public static String urlEncode(String s) {
return URLEncoder.encode(s, UTF_8);
return URLEncoder.encode(s, UTF_8).replaceAll("\\+", "%20");
}
/**

View File

@@ -1170,7 +1170,7 @@ public class JavaClientCodegenTest {
"formParams.add(\"file\", file);"
);
}
/**
* See https://github.com/OpenAPITools/openapi-generator/issues/8352
*/
@@ -1228,4 +1228,34 @@ public class JavaClientCodegenTest {
final Path defaultApi = Paths.get(output + "/src/main/java/xyz/abcdef/ApiClient.java");
TestUtils.assertFileContains(defaultApi, "value instanceof Map");
}
/**
* See https://github.com/OpenAPITools/openapi-generator/issues/11242
*/
@Test
public void testNativeClientWhiteSpacePathParamEncoding() throws IOException {
Map<String, Object> properties = new HashMap<>();
properties.put(JavaClientCodegen.JAVA8_MODE, true);
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/issue11242.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(), 34);
validateJavaSourceFiles(files);
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\"); }");
}
}

View File

@@ -0,0 +1,37 @@
openapi: 3.0.3
info:
title: Issue 11242 - Path Param encoding
description: "White space encoding in path parameters"
version: "1.0.0"
servers:
- url: localhost:8080
paths:
/api/{someParam}:
parameters:
- in: path
name: someParam
schema:
type: string
required: true
description: Some parameter.
get:
operationId: GetSomeParam
summary: View some param
responses:
'200':
description: Some return value
content:
application/json:
schema:
$ref: '#/components/schemas/SomeReturnValue'
example:
someParam: someValue
components:
schemas:
SomeReturnValue:
type: object
required:
- someParam
properties:
someParam:
type: string

View File

@@ -81,7 +81,7 @@ public class ApiClient {
* @return URL-encoded representation of the input string.
*/
public static String urlEncode(String s) {
return URLEncoder.encode(s, UTF_8);
return URLEncoder.encode(s, UTF_8).replaceAll("\\+", "%20");
}
/**

View File

@@ -81,7 +81,7 @@ public class ApiClient {
* @return URL-encoded representation of the input string.
*/
public static String urlEncode(String s) {
return URLEncoder.encode(s, UTF_8);
return URLEncoder.encode(s, UTF_8).replaceAll("\\+", "%20");
}
/**