Skip to content

Commit 8940196

Browse files
author
Skylar Stark
committed
Add ability to 'customize' the generated server base URL
1 parent 55ee01b commit 8940196

File tree

3 files changed

+43
-8
lines changed

3 files changed

+43
-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
@@ -62,7 +62,7 @@
6262
import org.slf4j.Logger;
6363
import org.slf4j.LoggerFactory;
6464
import org.springdoc.core.customizers.OpenApiBuilderCustomizer;
65-
65+
import org.springdoc.core.customizers.ServerBaseUrlCustomizer;
6666
import org.springframework.beans.BeansException;
6767
import org.springframework.beans.factory.config.BeanDefinition;
6868
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
@@ -120,6 +120,11 @@ public class OpenAPIService implements ApplicationContextAware {
120120
*/
121121
private final Optional<List<OpenApiBuilderCustomizer>> openApiBuilderCustomisers;
122122

123+
/**
124+
* The server base URL customisers.
125+
*/
126+
private final Optional<List<ServerBaseUrlCustomizer>> serverBaseUrlCustomisers;
127+
123128
/**
124129
* The Spring doc config properties.
125130
*/
@@ -188,7 +193,8 @@ public class OpenAPIService implements ApplicationContextAware {
188193
*/
189194
OpenAPIService(Optional<OpenAPI> openAPI, SecurityService securityParser,
190195
SpringDocConfigProperties springDocConfigProperties, PropertyResolverUtils propertyResolverUtils,
191-
Optional<List<OpenApiBuilderCustomizer>> openApiBuilderCustomisers) {
196+
Optional<List<OpenApiBuilderCustomizer>> openApiBuilderCustomisers,
197+
Optional<List<ServerBaseUrlCustomizer>> serverBaseUrlCustomisers) {
192198
if (openAPI.isPresent()) {
193199
this.openAPI = openAPI.get();
194200
if (this.openAPI.getComponents() == null)
@@ -202,6 +208,7 @@ public class OpenAPIService implements ApplicationContextAware {
202208
this.securityParser = securityParser;
203209
this.springDocConfigProperties = springDocConfigProperties;
204210
this.openApiBuilderCustomisers = openApiBuilderCustomisers;
211+
this.serverBaseUrlCustomisers = serverBaseUrlCustomisers;
205212
if (springDocConfigProperties.isUseFqn())
206213
TypeNameResolver.std.setUseFqn(true);
207214
}
@@ -466,7 +473,15 @@ public Schema resolveProperties(Schema schema, Locale locale) {
466473
* @param serverBaseUrl the server base url
467474
*/
468475
public void setServerBaseUrl(String serverBaseUrl) {
469-
this.serverBaseUrl = serverBaseUrl;
476+
String customServerBaseUrl = serverBaseUrl;
477+
478+
serverBaseUrlCustomisers.ifPresent(customisers -> {
479+
for (ServerBaseUrlCustomizer customiser : customisers) {
480+
customServerBaseUrl = customiser.customise(customServerBaseUrl);
481+
}
482+
});
483+
484+
this.serverBaseUrl = customServerBaseUrl;
470485
}
471486

472487
/**
@@ -810,8 +825,9 @@ public SecurityService getSecurityParser() {
810825

811826
/**
812827
* Gets server base URL
813-
*
828+
*
814829
* @return the server base URL
830+
*/
815831
public String getServerBaseUrl() {
816832
return serverBaseUrl;
817833
}
@@ -820,4 +836,4 @@ public String getServerBaseUrl() {
820836
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
821837
this.context = applicationContext;
822838
}
823-
}
839+
}

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.springdoc.core.customizers.OpenApiCustomiser;
5454
import org.springdoc.core.customizers.OperationCustomizer;
5555
import org.springdoc.core.customizers.PropertyCustomizer;
56+
import org.springdoc.core.customizers.ServerBaseUrlCustomizer;
5657
import org.springdoc.core.providers.ActuatorProvider;
5758
import org.springdoc.core.providers.CloudFunctionProvider;
5859
import org.springdoc.core.providers.JavadocProvider;
@@ -225,8 +226,9 @@ PolymorphicModelConverter polymorphicModelConverter() {
225226
OpenAPIService openAPIBuilder(Optional<OpenAPI> openAPI,
226227
SecurityService securityParser,
227228
SpringDocConfigProperties springDocConfigProperties,PropertyResolverUtils propertyResolverUtils,
228-
Optional<List<OpenApiBuilderCustomizer>> openApiBuilderCustomisers) {
229-
return new OpenAPIService(openAPI, securityParser, springDocConfigProperties, propertyResolverUtils, openApiBuilderCustomisers);
229+
Optional<List<OpenApiBuilderCustomizer>> openApiBuilderCustomisers,
230+
Optional<List<ServerBaseUrlCustomizer>> serverBaseUrlCustomisers) {
231+
return new OpenAPIService(openAPI, securityParser, springDocConfigProperties, propertyResolverUtils, openApiBuilderCustomisers, serverBaseUrlCustomisers);
230232
}
231233

232234
/**
@@ -579,4 +581,4 @@ CloudFunctionProvider springCloudFunctionProvider(Optional<FunctionCatalog> func
579581
return new SpringCloudFunctionProvider(functionCatalog, genericResponseService, springDocConfigProperties);
580582
}
581583
}
582-
}
584+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.springdoc.core.customizers;
2+
3+
/**
4+
* The interface Server Base URL customiser.
5+
* @author skstark
6+
*/
7+
@FunctionalInterface
8+
public interface ServerBaseUrlCustomizer {
9+
10+
/**
11+
* Customise.
12+
*
13+
* @param serverBaseUrl the serverBaseUrl.
14+
* @return the customised serverBaseUrl
15+
*/
16+
public String customise(String serverBaseUrl);
17+
}

0 commit comments

Comments
 (0)