Skip to content

Commit 6637d04

Browse files
Fix: Property resolution for parameter default values
1 parent 38477f0 commit 6637d04

7 files changed

Lines changed: 69 additions & 7 deletions

File tree

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
@@ -297,7 +297,7 @@ public Parameter buildParameterFromDoc(io.swagger.v3.oas.annotations.Parameter p
297297
optionalContent.ifPresent(parameter::setContent);
298298
}
299299
else
300-
setSchema(parameterDoc, components, jsonView, parameter);
300+
setSchema(parameterDoc, components, jsonView, parameter, locale);
301301

302302
setExamples(parameterDoc, parameter);
303303
setExtensions(parameterDoc, parameter, locale);
@@ -314,8 +314,9 @@ public Parameter buildParameterFromDoc(io.swagger.v3.oas.annotations.Parameter p
314314
* @param components the components
315315
* @param jsonView the json view
316316
* @param parameter the parameter
317+
* @param locale the locale
317318
*/
318-
private void setSchema(io.swagger.v3.oas.annotations.Parameter parameterDoc, Components components, JsonView jsonView, Parameter parameter) {
319+
private void setSchema(io.swagger.v3.oas.annotations.Parameter parameterDoc, Components components, JsonView jsonView, Parameter parameter, Locale locale) {
319320
if (StringUtils.isNotBlank(parameterDoc.ref()))
320321
parameter.$ref(parameterDoc.ref());
321322
else {
@@ -329,7 +330,11 @@ private void setSchema(io.swagger.v3.oas.annotations.Parameter parameterDoc, Com
329330
PrimitiveType primitiveType = PrimitiveType.fromTypeAndFormat(schema.getType(), schema.getFormat());
330331
if (primitiveType != null) {
331332
Schema<?> primitiveSchema = primitiveType.createProperty();
332-
primitiveSchema.setDefault(schema.getDefault());
333+
if (schema.getDefault() instanceof String) {
334+
primitiveSchema.setDefault(propertyResolverUtils.resolve(schema.getDefault().toString(), locale));
335+
} else {
336+
primitiveSchema.setDefault(schema.getDefault());
337+
}
333338
schema.setDefault(primitiveSchema.getDefault());
334339
}
335340
}

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)