Skip to content

Commit edf76e8

Browse files
committed
Cannot override servers in api-docs.yaml using OpenApiCustomiser; Fixes #1188.
1 parent bae53c3 commit edf76e8

File tree

4 files changed

+28
-8
lines changed

4 files changed

+28
-8
lines changed

springdoc-openapi-common/src/main/java/org/springdoc/core/OpenAPIService.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -455,16 +455,32 @@ private void buildOpenAPIWithOpenAPIDefinition(OpenAPI openAPI, OpenAPIDefinitio
455455
AnnotationsUtils.getTags(apiDef.tags(), false).ifPresent(tags -> openAPI.setTags(new ArrayList<>(tags)));
456456
// OpenApiDefinition servers
457457
Optional<List<Server>> optionalServers = AnnotationsUtils.getServers(apiDef.servers());
458-
if (optionalServers.isPresent()) {
459-
openAPI.setServers(optionalServers.get());
460-
this.isServersPresent = true;
461-
}
458+
optionalServers.map(this::resolveProperties).ifPresent(servers -> {
459+
this.isServersPresent = true;
460+
openAPI.servers(servers);
461+
}
462+
);
462463
// OpenApiDefinition extensions
463464
if (apiDef.extensions().length > 0) {
464465
openAPI.setExtensions(AnnotationsUtils.getExtensions(apiDef.extensions()));
465466
}
466467
}
467468

469+
/**
470+
* Resolve properties info.
471+
*
472+
* @param servers the servers
473+
* @return the servers
474+
*/
475+
private List<Server> resolveProperties(List<Server> servers) {
476+
PropertyResolverUtils propertyResolverUtils = context.getBean(PropertyResolverUtils.class);
477+
servers.forEach(server -> {
478+
resolveProperty(server::getUrl, server::url, propertyResolverUtils);
479+
resolveProperty(server::getDescription, server::description, propertyResolverUtils);
480+
});
481+
return servers;
482+
}
483+
468484
/**
469485
* Resolve properties info.
470486
*
@@ -618,7 +634,7 @@ private Set<io.swagger.v3.oas.annotations.security.SecurityScheme> getSecuritySc
618634
io.swagger.v3.oas.annotations.security.SecurityScheme.class));
619635
SecuritySchemes apiSecuritySchemes
620636
= AnnotationUtils.findAnnotation(Class.forName(bd.getBeanClassName()), io.swagger.v3.oas.annotations.security.SecuritySchemes.class);
621-
if (apiSecuritySchemes!=null && !ArrayUtils.isEmpty(apiSecuritySchemes.value()))
637+
if (apiSecuritySchemes != null && !ArrayUtils.isEmpty(apiSecuritySchemes.value()))
622638
Arrays.stream(apiSecuritySchemes.value()).forEach(apiSecurityScheme::add);
623639
}
624640
catch (ClassNotFoundException e) {

springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/app137/OpenApiConfig.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@
2424
import io.swagger.v3.oas.annotations.security.OAuthFlow;
2525
import io.swagger.v3.oas.annotations.security.OAuthFlows;
2626
import io.swagger.v3.oas.annotations.security.SecurityScheme;
27+
import io.swagger.v3.oas.annotations.servers.Server;
2728

28-
@OpenAPIDefinition(info = @Info(title = "My App",
29+
@OpenAPIDefinition(servers = @Server(url = "${test.server}", description = "${test.desc}"), info = @Info(title = "My App",
2930
description = "Some long and useful description", version = "v1"))
3031
@SecurityScheme(name = "security_auth", type = SecuritySchemeType.OAUTH2,
3132
flows = @OAuthFlows(authorizationCode = @OAuthFlow(

springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/app137/SpringDocApp137Test.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@
2525
import test.org.springdoc.api.AbstractSpringDocTest;
2626

2727
import org.springframework.boot.autoconfigure.SpringBootApplication;
28+
import org.springframework.test.context.TestPropertySource;
2829

2930

3031
/**
3132
* Tests Spring meta-annotations as method parameters
3233
*/
34+
@TestPropertySource(properties = {"test.server=http://test.toto.com", "test.desc=toto desc"})
3335
public class SpringDocApp137Test extends AbstractSpringDocTest {
3436

3537
@SpringBootApplication

springdoc-openapi-webmvc-core/src/test/resources/results/app137.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
},
88
"servers": [
99
{
10-
"url": "http://localhost",
11-
"description": "Generated server url"
10+
"url": "http://test.toto.com",
11+
"description": "toto desc",
12+
"variables": {}
1213
}
1314
],
1415
"paths": {

0 commit comments

Comments
 (0)