Skip to content

Commit 6cd7989

Browse files
authored
[Java][native][apache-httpclient] Update toUrlQueryString to support form style for object (#14478)
* update toUrlQueryString * add new files * minor bug fixes * support object in query parameter - java apache httpclient * rename variable - java native * update samples * fix try catch
1 parent d1cde7f commit 6cd7989

File tree

228 files changed

+8867
-688
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

228 files changed

+8867
-688
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -428,10 +428,10 @@ public void processOpts() {
428428
}
429429

430430
// add URL query deepObject support to native, apache-httpclient by default
431-
if (!additionalProperties.containsKey("supportUrlQueryDeepObject") && (isLibrary(NATIVE) || isLibrary(APACHE))) {
432-
additionalProperties.put("supportUrlQueryDeepObject", true);
431+
if (!additionalProperties.containsKey("supportUrlQuery") && (isLibrary(NATIVE) || isLibrary(APACHE))) {
432+
additionalProperties.put("supportUrlQuery", true);
433433
} else {
434-
additionalProperties.put("supportUrlQueryDeepObject", Boolean.parseBoolean(additionalProperties.get(SUPPORT_STREAMING).toString()));
434+
additionalProperties.put("supportUrlQuery", Boolean.parseBoolean(additionalProperties.get(SUPPORT_STREAMING).toString()));
435435
}
436436

437437
final String invokerFolder = (sourceFolder + '/' + invokerPackage).replace(".", "/");

modules/openapi-generator/src/main/resources/Java/libraries/apache-httpclient/api.mustache

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public class {{classname}} {
7676
String localVarPath = "{{{path}}}"{{#pathParams}}
7777
.replaceAll("\\{" + "{{baseName}}" + "\\}", apiClient.escapeString({{{paramName}}}.toString())){{/pathParams}};
7878

79-
{{javaUtilPrefix}}StringJoiner localVarQueryDeepObjectStringJoiner = new StringJoiner("&");
79+
{{javaUtilPrefix}}StringJoiner localVarQueryStringJoiner = new StringJoiner("&");
8080
String localVarQueryParameterBaseName;
8181
{{javaUtilPrefix}}List<Pair> localVarQueryParams = new {{javaUtilPrefix}}ArrayList<Pair>();
8282
{{javaUtilPrefix}}List<Pair> localVarCollectionQueryParams = new {{javaUtilPrefix}}ArrayList<Pair>();
@@ -89,11 +89,11 @@ public class {{classname}} {
8989
localVarQueryParameterBaseName = "{{{baseName}}}";
9090
{{#isArray}}
9191
for (int i=0; i < {{paramName}}.size(); i++) {
92-
localVarQueryDeepObjectStringJoiner.add({{paramName}}.get(i).toUrlQueryString(String.format("{{baseName}}[%d]", i)));
92+
localVarQueryStringJoiner.add({{paramName}}.get(i).toUrlQueryString(String.format("{{baseName}}[%d]", i)));
9393
}
9494
{{/isArray}}
9595
{{^isArray}}
96-
localVarQueryDeepObjectStringJoiner.add({{paramName}}.toUrlQueryString("{{baseName}}"));
96+
localVarQueryStringJoiner.add({{paramName}}.toUrlQueryString("{{baseName}}"));
9797
{{/isArray}}
9898
{{/isDeepObject}}
9999
{{^isDeepObject}}
@@ -109,7 +109,12 @@ public class {{classname}} {
109109
{{/vars}}
110110
{{/hasVars}}
111111
{{^hasVars}}
112+
{{#isModel}}
113+
localVarQueryStringJoiner.add({{paramName}}.toUrlQueryString());
114+
{{/isModel}}
115+
{{^isModel}}
112116
{{#collectionFormat}}localVarCollectionQueryParams.addAll(apiClient.parameterToPairs("{{{collectionFormat}}}", {{/collectionFormat}}{{^collectionFormat}}localVarQueryParams.addAll(apiClient.parameterToPair({{/collectionFormat}}"{{baseName}}", {{paramName}}));
117+
{{/isModel}}
113118
{{/hasVars}}
114119
{{/isExplode}}
115120
{{^isExplode}}
@@ -152,7 +157,7 @@ public class {{classname}} {
152157
"{{httpMethod}}",
153158
localVarQueryParams,
154159
localVarCollectionQueryParams,
155-
localVarQueryDeepObjectStringJoiner.toString(),
160+
localVarQueryStringJoiner.toString(),
156161
localVarPostBody,
157162
localVarHeaderParams,
158163
localVarCookieParams,

modules/openapi-generator/src/main/resources/Java/libraries/native/api.mustache

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ public class {{classname}} {
338338

339339
{{#hasQueryParams}}
340340
{{javaUtilPrefix}}List<Pair> localVarQueryParams = new {{javaUtilPrefix}}ArrayList<>();
341-
{{javaUtilPrefix}}StringJoiner localVarQueryDeepObjectStringJoiner = new {{javaUtilPrefix}}StringJoiner("&");
341+
{{javaUtilPrefix}}StringJoiner localVarQueryStringJoiner = new {{javaUtilPrefix}}StringJoiner("&");
342342
String localVarQueryParameterBaseName;
343343
{{#queryParams}}
344344
localVarQueryParameterBaseName = "{{{baseName}}}";
@@ -350,11 +350,11 @@ public class {{classname}} {
350350
if ({{paramName}} != null) {
351351
{{#isArray}}
352352
for (int i=0; i < {{paramName}}.size(); i++) {
353-
localVarQueryDeepObjectStringJoiner.add({{paramName}}.get(i).toUrlQueryString(String.format("{{baseName}}[%d]", i)));
353+
localVarQueryStringJoiner.add({{paramName}}.get(i).toUrlQueryString(String.format("{{baseName}}[%d]", i)));
354354
}
355355
{{/isArray}}
356356
{{^isArray}}
357-
localVarQueryDeepObjectStringJoiner.add({{paramName}}.toUrlQueryString("{{baseName}}"));
357+
localVarQueryStringJoiner.add({{paramName}}.toUrlQueryString("{{baseName}}"));
358358
{{/isArray}}
359359
}
360360
{{/isDeepObject}}
@@ -371,7 +371,12 @@ public class {{classname}} {
371371
{{/vars}}
372372
{{/hasVars}}
373373
{{^hasVars}}
374+
{{#isModel}}
375+
localVarQueryStringJoiner.add({{paramName}}.toUrlQueryString(null));
376+
{{/isModel}}
377+
{{^isModel}}
374378
localVarQueryParams.addAll(ApiClient.parameterToPairs("{{baseName}}", {{paramName}}));
379+
{{/isModel}}
375380
{{/hasVars}}
376381
{{/isExplode}}
377382
{{^isExplode}}
@@ -381,11 +386,11 @@ public class {{classname}} {
381386
{{/collectionFormat}}
382387
{{/queryParams}}
383388

384-
if (!localVarQueryParams.isEmpty() || localVarQueryDeepObjectStringJoiner.length() != 0) {
389+
if (!localVarQueryParams.isEmpty() || localVarQueryStringJoiner.length() != 0) {
385390
{{javaUtilPrefix}}StringJoiner queryJoiner = new {{javaUtilPrefix}}StringJoiner("&");
386391
localVarQueryParams.forEach(p -> queryJoiner.add(p.getName() + '=' + p.getValue()));
387-
if (localVarQueryDeepObjectStringJoiner.length() != 0) {
388-
queryJoiner.add(localVarQueryDeepObjectStringJoiner.toString());
392+
if (localVarQueryStringJoiner.length() != 0) {
393+
queryJoiner.add(localVarQueryStringJoiner.toString());
389394
}
390395
localVarRequestBuilder.uri(URI.create(memberVarBaseUri + localVarPath + '?' + queryJoiner.toString()));
391396
} else {

modules/openapi-generator/src/main/resources/Java/libraries/native/model.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ import com.fasterxml.jackson.annotation.JsonAnySetter;
1616
{{/additionalPropertiesType}}
1717
{{/model}}
1818
{{/models}}
19-
{{#supportUrlQueryDeepObject}}
19+
{{#supportUrlQuery}}
2020
import java.net.URLEncoder;
2121
import java.nio.charset.StandardCharsets;
2222
import java.util.StringJoiner;
23-
{{/supportUrlQueryDeepObject}}
23+
{{/supportUrlQuery}}
2424
import java.util.Objects;
2525
import java.util.Arrays;
2626
import java.util.Map;

modules/openapi-generator/src/main/resources/Java/libraries/native/modelEnum.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ import com.google.gson.stream.JsonWriter;
6262
}
6363
{{#isNullable}}return null;{{/isNullable}}{{^isNullable}}{{#enumUnknownDefaultCase}}{{#allowableValues}}{{#enumVars}}{{#-last}}return {{{name}}};{{/-last}}{{/enumVars}}{{/allowableValues}}{{/enumUnknownDefaultCase}}{{^enumUnknownDefaultCase}}throw new IllegalArgumentException("Unexpected value '" + value + "'");{{/enumUnknownDefaultCase}}{{/isNullable}}
6464
}
65-
{{#supportUrlQueryDeepObject}}
65+
{{#supportUrlQuery}}
6666

6767
/**
6868
* Convert the instance into URL query string.
@@ -77,7 +77,7 @@ import com.google.gson.stream.JsonWriter;
7777

7878
return String.format("%s=%s", prefix, this.toString());
7979
}
80-
{{/supportUrlQueryDeepObject}}
80+
{{/supportUrlQuery}}
8181

8282
{{#gson}}
8383

modules/openapi-generator/src/main/resources/Java/libraries/native/pojo.mustache

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,16 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
348348
}
349349
return o.toString().replace("\n", "\n ");
350350
}
351-
{{#supportUrlQueryDeepObject}}
351+
{{#supportUrlQuery}}
352+
353+
/**
354+
* Convert the instance into URL query string.
355+
*
356+
* @return URL query string
357+
*/
358+
public String toUrlQueryString() {
359+
return toUrlQueryString(null);
360+
}
352361
353362
/**
354363
* Convert the instance into URL query string.
@@ -357,8 +366,18 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
357366
* @return URL query string
358367
*/
359368
public String toUrlQueryString(String prefix) {
369+
String suffix = "";
370+
String containerSuffix = "";
371+
String containerPrefix = "";
360372
if (prefix == null) {
373+
// style=form, explode=true, e.g. /pet?name=cat&type=manx
361374
prefix = "";
375+
} else {
376+
// deepObject style e.g. /pet?id[name]=cat&id[type]=manx
377+
prefix = prefix + "[";
378+
suffix = "]";
379+
containerSuffix = "]";
380+
containerPrefix = "[";
362381
}
363382
364383
StringJoiner joiner = new StringJoiner("&");
@@ -371,15 +390,19 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
371390
if ({{getter}}() != null) {
372391
int i = 0;
373392
for ({{items.dataType}} _item : {{getter}}()) {
374-
joiner.add(String.format("%s[{{baseName}}][%d]=%s", prefix, i, URLEncoder.encode(String.valueOf(_item), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
393+
joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix,
394+
"".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix),
395+
URLEncoder.encode(String.valueOf(_item), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
375396
}
376397
i++;
377398
}
378399
{{/uniqueItems}}
379400
{{^uniqueItems}}
380401
if ({{getter}}() != null) {
381402
for (int i = 0; i < {{getter}}().size(); i++) {
382-
joiner.add(String.format("%s[{{baseName}}][%d]=%s", prefix, i, URLEncoder.encode(String.valueOf({{getter}}().get(i)), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
403+
joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix,
404+
"".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix),
405+
URLEncoder.encode(String.valueOf({{getter}}().get(i)), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
383406
}
384407
}
385408
{{/uniqueItems}}
@@ -391,7 +414,8 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
391414
int i = 0;
392415
for ({{items.dataType}} _item : {{getter}}()) {
393416
if ({{getter}}().get(i) != null) {
394-
joiner.add(_item.toUrlQueryString(String.format("%s[{{baseName}}][%d]", prefix, i)));
417+
joiner.add(_item.toUrlQueryString(String.format("%s{{baseName}}%s%s", prefix, suffix,
418+
"".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix))));
395419
}
396420
}
397421
i++;
@@ -401,7 +425,8 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
401425
if ({{getter}}() != null) {
402426
for (int i = 0; i < {{getter}}().size(); i++) {
403427
if ({{getter}}().get(i) != null) {
404-
joiner.add({{getter}}().get(i).toUrlQueryString(String.format("%s[{{baseName}}][%d]", prefix, i)));
428+
joiner.add({{getter}}().get(i).toUrlQueryString(String.format("%s{{baseName}}%s%s", prefix, suffix,
429+
"".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix))));
405430
}
406431
}
407432
}
@@ -413,7 +438,9 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
413438
int i = 0;
414439
for ({{items.dataType}} _item : {{getter}}()) {
415440
if (_item != null) {
416-
joiner.add(String.format("%s[{{baseName}}][%d]=%s", prefix, i, URLEncoder.encode(String.valueOf(_item), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
441+
joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix,
442+
"".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix)),
443+
URLEncoder.encode(String.valueOf(_item), StandardCharsets.UTF_8).replaceAll("\\+", "%20"));
417444
}
418445
i++;
419446
}
@@ -423,7 +450,9 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
423450
if ({{getter}}() != null) {
424451
for (int i = 0; i < {{getter}}().size(); i++) {
425452
if ({{getter}}().get(i) != null) {
426-
joiner.add(String.format("%s[{{baseName}}][%d]=%s", prefix, i, URLEncoder.encode(String.valueOf({{getter}}().get(i)), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
453+
joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix,
454+
"".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, i, containerSuffix),
455+
URLEncoder.encode(String.valueOf({{getter}}().get(i)), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
427456
}
428457
}
429458
}
@@ -436,15 +465,18 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
436465
{{#items.isPrimitiveType}}
437466
if ({{getter}}() != null) {
438467
for (String _key : {{getter}}().keySet()) {
439-
joiner.add(String.format("%s[{{baseName}}][%s]=%s", prefix, {{getter}}().get(_key), URLEncoder.encode(String.valueOf({{getter}}().get(_key)), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
468+
joiner.add(String.format("%s{{baseName}}%s%s=%s", prefix, suffix,
469+
"".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, _key, containerSuffix),
470+
{{getter}}().get(_key), URLEncoder.encode(String.valueOf({{getter}}().get(_key)), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
440471
}
441472
}
442473
{{/items.isPrimitiveType}}
443474
{{^items.isPrimitiveType}}
444475
if ({{getter}}() != null) {
445476
for (String _key : {{getter}}().keySet()) {
446477
if ({{getter}}().get(_key) != null) {
447-
joiner.add({{getter}}().get(_key).toUrlQueryString(String.format("%s[{{baseName}}][%s]", prefix, _key)));
478+
joiner.add({{getter}}().get(_key).toUrlQueryString(String.format("%s{{baseName}}%s%s", prefix, suffix,
479+
"".equals(suffix) ? "" : String.format("%s%d%s", containerPrefix, _key, containerSuffix))));
448480
}
449481
}
450482
}
@@ -453,18 +485,18 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
453485
{{^isMap}}
454486
{{#isPrimitiveType}}
455487
if ({{getter}}() != null) {
456-
joiner.add(String.format("%s[{{{baseName}}}]=%s", prefix, URLEncoder.encode(String.valueOf({{{getter}}}()), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
488+
joiner.add(String.format("%s{{{baseName}}}%s=%s", prefix, suffix, URLEncoder.encode(String.valueOf({{{getter}}}()), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
457489
}
458490
{{/isPrimitiveType}}
459491
{{^isPrimitiveType}}
460492
{{#isModel}}
461493
if ({{getter}}() != null) {
462-
joiner.add({{getter}}().toUrlQueryString(prefix + "[{{{baseName}}}]"));
494+
joiner.add({{getter}}().toUrlQueryString(prefix + "{{{baseName}}}" + suffix));
463495
}
464496
{{/isModel}}
465497
{{^isModel}}
466498
if ({{getter}}() != null) {
467-
joiner.add(String.format("%s[{{{baseName}}}]=%s", prefix, URLEncoder.encode(String.valueOf({{{getter}}}()), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
499+
joiner.add(String.format("%s{{{baseName}}}%s=%s", prefix, suffix, URLEncoder.encode(String.valueOf({{{getter}}}()), StandardCharsets.UTF_8).replaceAll("\\+", "%20")));
468500
}
469501
{{/isModel}}
470502
{{/isPrimitiveType}}
@@ -474,7 +506,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
474506
{{/allVars}}
475507
return joiner.toString();
476508
}
477-
{{/supportUrlQueryDeepObject}}
509+
{{/supportUrlQuery}}
478510
{{#parcelableModel}}
479511
480512
public void writeToParcel(Parcel out, int flags) {

modules/openapi-generator/src/main/resources/Java/model.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ import {{javaxPackage}}.validation.Valid;
5555
{{#performBeanValidation}}
5656
import org.hibernate.validator.constraints.*;
5757
{{/performBeanValidation}}
58-
{{#supportUrlQueryDeepObject}}
58+
{{#supportUrlQuery}}
5959
import java.io.UnsupportedEncodingException;
6060
import java.net.URLEncoder;
6161
import java.util.StringJoiner;
62-
{{/supportUrlQueryDeepObject}}
62+
{{/supportUrlQuery}}
6363

6464
{{#models}}
6565
{{#model}}

modules/openapi-generator/src/main/resources/Java/modelEnum.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ import com.google.gson.stream.JsonWriter;
9898
}
9999
}
100100
{{/jsonb}}
101-
{{#supportUrlQueryDeepObject}}
101+
{{#supportUrlQuery}}
102102

103103
/**
104104
* Convert the instance into URL query string.
@@ -113,5 +113,5 @@ import com.google.gson.stream.JsonWriter;
113113

114114
return String.format("%s=%s", prefix, this.toString());
115115
}
116-
{{/supportUrlQueryDeepObject}}
116+
{{/supportUrlQuery}}
117117
}

0 commit comments

Comments
 (0)