Skip to content

Commit 2a2f566

Browse files
skylar-starkSkylar Stark
authored and
Skylar Stark
committed
Add method to retrieve server base URL and ability to 'customize' the generated server base URL
1 parent a6fcf0f commit 2a2f566

File tree

4 files changed

+51
-7
lines changed

4 files changed

+51
-7
lines changed

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

Lines changed: 28 additions & 4 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+
if (serverBaseUrlCustomisers.isPresent()) {
479+
for (ServerBaseUrlCustomizer customiser : serverBaseUrlCustomisers.get()) {
480+
customServerBaseUrl = customiser.customise(customServerBaseUrl);
481+
}
482+
}
483+
484+
this.serverBaseUrl = customServerBaseUrl;
470485
}
471486

472487
/**
@@ -808,8 +823,17 @@ public SecurityService getSecurityParser() {
808823
return securityParser;
809824
}
810825

826+
/**
827+
* Gets server base URL
828+
*
829+
* @return the server base URL
830+
*/
831+
public String getServerBaseUrl() {
832+
return serverBaseUrl;
833+
}
834+
811835
@Override
812836
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
813837
this.context = applicationContext;
814838
}
815-
}
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 skylar-stark
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+
}

springdoc-openapi-common/src/test/java/org/springdoc/api/AbstractOpenApiResourceTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ public void setUp() {
111111
openAPI = new OpenAPI();
112112
openAPI.setPaths(new Paths().addPathItem(PATH, new PathItem()));
113113
ReflectionTestUtils.setField(openAPIService, "cachedOpenAPI", new HashMap<>());
114+
ReflectionTestUtils.setField(openAPIService, "serverBaseUrlCustomisers", Optional.empty());
114115

115116
when(openAPIService.getCalculatedOpenAPI()).thenReturn(openAPI);
116117
when(openAPIService.getContext()).thenReturn(context);

0 commit comments

Comments
 (0)