Skip to content

Commit 0d909dd

Browse files
Fix: Property resolution for parameter default values
1 parent 3215244 commit 0d909dd

File tree

7 files changed

+69
-7
lines changed

7 files changed

+69
-7
lines changed

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/service/GenericParameterService.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ public Parameter buildParameterFromDoc(io.swagger.v3.oas.annotations.Parameter p
303303
optionalContent.ifPresent(parameter::setContent);
304304
}
305305
else
306-
setSchema(parameterDoc, components, jsonView, parameter);
306+
setSchema(parameterDoc, components, jsonView, parameter, locale);
307307

308308
setExamples(parameterDoc, parameter);
309309
setExtensions(parameterDoc, parameter, locale);
@@ -320,8 +320,9 @@ public Parameter buildParameterFromDoc(io.swagger.v3.oas.annotations.Parameter p
320320
* @param components the components
321321
* @param jsonView the json view
322322
* @param parameter the parameter
323+
* @param locale the locale
323324
*/
324-
private void setSchema(io.swagger.v3.oas.annotations.Parameter parameterDoc, Components components, JsonView jsonView, Parameter parameter) {
325+
private void setSchema(io.swagger.v3.oas.annotations.Parameter parameterDoc, Components components, JsonView jsonView, Parameter parameter, Locale locale) {
325326
if (StringUtils.isNotBlank(parameterDoc.ref()))
326327
parameter.$ref(parameterDoc.ref());
327328
else {
@@ -335,7 +336,11 @@ private void setSchema(io.swagger.v3.oas.annotations.Parameter parameterDoc, Com
335336
PrimitiveType primitiveType = PrimitiveType.fromTypeAndFormat(schema.getType(), schema.getFormat());
336337
if (primitiveType != null) {
337338
Schema<?> primitiveSchema = primitiveType.createProperty();
338-
primitiveSchema.setDefault(schema.getDefault());
339+
if (schema.getDefault() instanceof String stringValue) {
340+
primitiveSchema.setDefault(propertyResolverUtils.resolve(stringValue, locale));
341+
} else {
342+
primitiveSchema.setDefault(schema.getDefault());
343+
}
339344
schema.setDefault(primitiveSchema.getDefault());
340345
}
341346
}

springdoc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app139/HelloController.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424

2525
package test.org.springdoc.api.v30.app139;
2626

27+
import io.swagger.v3.oas.annotations.Parameter;
28+
import io.swagger.v3.oas.annotations.enums.ParameterIn;
29+
import io.swagger.v3.oas.annotations.media.Schema;
2730
import org.springframework.http.MediaType;
2831
import org.springframework.web.bind.annotation.GetMapping;
2932
import org.springframework.web.bind.annotation.RequestParam;
@@ -33,6 +36,10 @@
3336
public class HelloController {
3437

3538
@GetMapping(produces = MediaType.TEXT_PLAIN_VALUE, path = "/test1")
39+
@Parameter(name = "parameter", in = ParameterIn.QUERY,
40+
schema = @Schema(type = "string", defaultValue = "${test.parameter-default-value}"))
41+
@Parameter(name = "parameter-boolean", in = ParameterIn.QUERY,
42+
schema = @Schema(type = "boolean", defaultValue = "${test.parameter-boolean-default-value}"))
3643
public String echo1(@RequestParam(name = "${test.name}", defaultValue = "${test.default-value}") String text) {
3744
return text;
3845
}

springdoc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v30/app139/SpringDocApp139Test.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,21 @@
2323
*/
2424
package test.org.springdoc.api.v30.app139;
2525

26-
import test.org.springdoc.api.v30.AbstractSpringDocV30Test;
27-
2826
import org.springframework.boot.autoconfigure.SpringBootApplication;
2927
import org.springframework.test.context.TestPropertySource;
28+
import test.org.springdoc.api.v30.AbstractSpringDocV30Test;
3029

3130

3231
/**
3332
* Tests Spring meta-annotations as method parameters
3433
*/
35-
@TestPropertySource(properties = { "test.name=text", "test.value=text", "test.default-value=default-text" })
34+
@TestPropertySource(properties = {
35+
"test.name=text",
36+
"test.value=text",
37+
"test.default-value=default-text",
38+
"test.parameter-default-value=parameter-text",
39+
"test.parameter-boolean-default-value=true"
40+
})
3641
public class SpringDocApp139Test extends AbstractSpringDocV30Test {
3742

3843
@SpringBootApplication

springdoc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app139/HelloController.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424

2525
package test.org.springdoc.api.v31.app139;
2626

27+
import io.swagger.v3.oas.annotations.Parameter;
28+
import io.swagger.v3.oas.annotations.enums.ParameterIn;
29+
import io.swagger.v3.oas.annotations.media.Schema;
2730
import org.springframework.http.MediaType;
2831
import org.springframework.web.bind.annotation.GetMapping;
2932
import org.springframework.web.bind.annotation.RequestParam;
@@ -33,6 +36,10 @@
3336
public class HelloController {
3437

3538
@GetMapping(produces = MediaType.TEXT_PLAIN_VALUE, path = "/test1")
39+
@Parameter(name = "parameter", in = ParameterIn.QUERY,
40+
schema = @Schema(type = "string", defaultValue = "${test.parameter-default-value}"))
41+
@Parameter(name = "parameter-boolean", in = ParameterIn.QUERY,
42+
schema = @Schema(type = "boolean", defaultValue = "${test.parameter-boolean-default-value}"))
3643
public String echo1(@RequestParam(name = "${test.name}", defaultValue = "${test.default-value}") String text) {
3744
return text;
3845
}

springdoc-openapi-starter-webmvc-api/src/test/java/test/org/springdoc/api/v31/app139/SpringDocApp139Test.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,13 @@
3232
/**
3333
* Tests Spring meta-annotations as method parameters
3434
*/
35-
@TestPropertySource(properties = { "test.name=text", "test.value=text", "test.default-value=default-text" })
35+
@TestPropertySource(properties = {
36+
"test.name=text",
37+
"test.value=text",
38+
"test.default-value=default-text",
39+
"test.parameter-default-value=parameter-text",
40+
"test.parameter-boolean-default-value=true"
41+
})
3642
public class SpringDocApp139Test extends AbstractSpringDocTest {
3743

3844
@SpringBootApplication

springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app139.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,22 @@
5757
"type": "string",
5858
"default": "default-text"
5959
}
60+
},
61+
{
62+
"name" : "parameter",
63+
"in" : "query",
64+
"schema" : {
65+
"type" : "string",
66+
"default": "parameter-text"
67+
}
68+
},
69+
{
70+
"name" : "parameter-boolean",
71+
"in" : "query",
72+
"schema" : {
73+
"type" : "boolean",
74+
"default": true
75+
}
6076
}
6177
],
6278
"responses": {

springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.1.0/app139.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,22 @@
5757
"type": "string",
5858
"default": "default-text"
5959
}
60+
},
61+
{
62+
"name" : "parameter",
63+
"in" : "query",
64+
"schema" : {
65+
"type" : "string",
66+
"default": "parameter-text"
67+
}
68+
},
69+
{
70+
"name" : "parameter-boolean",
71+
"in" : "query",
72+
"schema" : {
73+
"type" : "boolean",
74+
"default": true
75+
}
6076
}
6177
],
6278
"responses": {

0 commit comments

Comments
 (0)