[go] Correctly set default array value on query parameters (#22060)

This commit is contained in:
Rens Groothuijsen
2025-10-27 03:30:08 +01:00
committed by GitHub
parent 75ae04ecfd
commit a4d05b38f5
10 changed files with 87 additions and 16 deletions

View File

@@ -17,6 +17,7 @@
package org.openapitools.codegen.languages;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.google.common.collect.Iterables;
import com.samskivert.mustache.Mustache;
import io.swagger.v3.oas.models.media.Schema;
@@ -440,6 +441,17 @@ public class GoClientCodegen extends AbstractGoCodegen {
return null;
}
if (ModelUtils.isArraySchema(p)) {
StringJoiner joinedDefaultValues = new StringJoiner(", ");
Object defaultValues = p.getDefault();
if (defaultValues instanceof ArrayNode) {
for (var value : (ArrayNode) defaultValues) {
joinedDefaultValues.add(value.toString());
}
return "{" + joinedDefaultValues + "}";
}
}
return super.toDefaultValue(p);
}

View File

@@ -217,8 +217,16 @@ func (a *{{{classname}}}Service) {{nickname}}Execute(r {{#structPrefix}}{{&class
parameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", r.{{paramName}}, "{{style}}", "{{collectionFormat}}")
{{/isCollectionFormatMulti}}
{{#defaultValue}}} else {
var defaultValue {{{dataType}}} = {{{.}}}
r.{{paramName}} = &defaultValue
{{#isArray}}
var defaultValue {{{dataType}}} = {{{dataType}}}{{{.}}}
parameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", defaultValue, "{{style}}", "{{collectionFormat}}")
r.{{paramName}} = &defaultValue
{{/isArray}}
{{^isArray}}
var defaultValue {{{dataType}}} = {{{.}}}
parameterAddToHeaderOrQuery(localVarQueryParams, "{{{baseName}}}", defaultValue, "{{style}}", "{{collectionFormat}}")
r.{{paramName}} = &defaultValue
{{/isArray}}
{{/defaultValue}}}
{{/required}}
{{/queryParams}}

View File

@@ -418,4 +418,24 @@ public class GoClientCodegenTest {
TestUtils.assertFileContains(Paths.get(output + "/model_pet.go"), "tags>tag");
}
@Test
public void testArrayDefaultValue() throws IOException {
File output = Files.createTempDirectory("test").toFile();
output.deleteOnExit();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("go")
.setInputSpec("src/test/resources/3_1/issue_21077.yaml")
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
DefaultGenerator generator = new DefaultGenerator();
List<File> files = generator.opts(configurator.toClientOptInput()).generate();
files.forEach(File::deleteOnExit);
Path apiPath = Paths.get(output + "/api_default.go");
String defaultArrayString = "var defaultValue []interface{} = []interface{}{\"test1\", \"test2\", 1}";
String defaultValueString = "var defaultValue string = \"test3\"";
TestUtils.assertFileContains(apiPath, defaultArrayString);
TestUtils.assertFileContains(apiPath, defaultValueString);
}
}

View File

@@ -0,0 +1,29 @@
openapi: 3.1.0
info:
title: Test
version: "1.0"
paths:
/a:
post:
summary: Test
requestBody:
content:
application/json:
schema:
type: string
parameters:
- name: "arrayparam"
in: query
schema:
type: array
default: ["test1", "test2", 1]
- name: "stringparam"
in: query
schema:
type: string
default: "test3"
responses:
200:
description: Ok

View File

@@ -4,10 +4,10 @@
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**ArrayStringEnumRefDefault** | Pointer to [**[]StringEnumRef**](StringEnumRef.md) | | [optional] [default to ["success","failure"]]
**ArrayStringEnumDefault** | Pointer to **[]string** | | [optional] [default to ["success","failure"]]
**ArrayStringDefault** | Pointer to **[]string** | | [optional] [default to ["failure","skipped"]]
**ArrayIntegerDefault** | Pointer to **[]int32** | | [optional] [default to [1,3]]
**ArrayStringEnumRefDefault** | Pointer to [**[]StringEnumRef**](StringEnumRef.md) | | [optional] [default to {"success", "failure"}]
**ArrayStringEnumDefault** | Pointer to **[]string** | | [optional] [default to {"success", "failure"}]
**ArrayStringDefault** | Pointer to **[]string** | | [optional] [default to {"failure", "skipped"}]
**ArrayIntegerDefault** | Pointer to **[]int32** | | [optional] [default to {1, 3}]
**ArrayString** | Pointer to **[]string** | | [optional]
**ArrayStringNullable** | Pointer to **[]string** | | [optional]
**ArrayStringExtensionNullable** | Pointer to **[]string** | | [optional]

View File

@@ -5,7 +5,7 @@
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Id** | Pointer to **int64** | Query | [optional]
**Outcomes** | Pointer to **[]string** | | [optional] [default to ["SUCCESS","FAILURE"]]
**Outcomes** | Pointer to **[]string** | | [optional] [default to {"SUCCESS", "FAILURE"}]
## Methods

View File

@@ -4,10 +4,10 @@
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**ArrayStringEnumRefDefault** | Pointer to [**[]StringEnumRef**](StringEnumRef.md) | | [optional] [default to ["success","failure"]]
**ArrayStringEnumDefault** | Pointer to **[]string** | | [optional] [default to ["success","failure"]]
**ArrayStringDefault** | Pointer to **[]string** | | [optional] [default to ["failure","skipped"]]
**ArrayIntegerDefault** | Pointer to **[]int32** | | [optional] [default to [1,3]]
**ArrayStringEnumRefDefault** | Pointer to [**[]StringEnumRef**](StringEnumRef.md) | | [optional] [default to {"success", "failure"}]
**ArrayStringEnumDefault** | Pointer to **[]string** | | [optional] [default to {"success", "failure"}]
**ArrayStringDefault** | Pointer to **[]string** | | [optional] [default to {"failure", "skipped"}]
**ArrayIntegerDefault** | Pointer to **[]int32** | | [optional] [default to {1, 3}]
**ArrayString** | Pointer to **[]string** | | [optional]
**ArrayStringNullable** | Pointer to **[]string** | | [optional]
**ArrayStringExtensionNullable** | Pointer to **[]string** | | [optional]

View File

@@ -5,7 +5,7 @@
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Id** | Pointer to **int64** | Query | [optional]
**Outcomes** | Pointer to **[]string** | | [optional] [default to ["SUCCESS","FAILURE"]]
**Outcomes** | Pointer to **[]string** | | [optional] [default to {"SUCCESS", "FAILURE"}]
## Methods

View File

@@ -1425,8 +1425,9 @@ func (a *FakeAPIService) TestEnumParametersExecute(r ApiTestEnumParametersReques
if r.enumQueryString != nil {
parameterAddToHeaderOrQuery(localVarQueryParams, "enum_query_string", r.enumQueryString, "", "")
} else {
var defaultValue string = "-efg"
r.enumQueryString = &defaultValue
var defaultValue string = "-efg"
parameterAddToHeaderOrQuery(localVarQueryParams, "enum_query_string", defaultValue, "", "")
r.enumQueryString = &defaultValue
}
if r.enumQueryInteger != nil {
parameterAddToHeaderOrQuery(localVarQueryParams, "enum_query_integer", r.enumQueryInteger, "", "")

View File

@@ -1751,8 +1751,9 @@ func (a *FakeAPIService) TestEnumParametersExecute(r ApiTestEnumParametersReques
if r.enumQueryString != nil {
parameterAddToHeaderOrQuery(localVarQueryParams, "enum_query_string", r.enumQueryString, "form", "")
} else {
var defaultValue string = "-efg"
r.enumQueryString = &defaultValue
var defaultValue string = "-efg"
parameterAddToHeaderOrQuery(localVarQueryParams, "enum_query_string", defaultValue, "form", "")
r.enumQueryString = &defaultValue
}
if r.enumQueryInteger != nil {
parameterAddToHeaderOrQuery(localVarQueryParams, "enum_query_integer", r.enumQueryInteger, "form", "")