Skip to content

Commit e5f058a

Browse files
author
bnasslahsen
committed
Merge branch 'PicnicSupermarket-dodecahedra/pre-loading'
2 parents b99a2d4 + cf77e88 commit e5f058a

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed

springdoc-openapi-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,11 @@
3737
import java.util.Objects;
3838
import java.util.Optional;
3939
import java.util.Set;
40+
import java.util.concurrent.Executors;
4041
import java.util.stream.Collectors;
4142

43+
import javax.annotation.PostConstruct;
44+
4245
import com.fasterxml.jackson.annotation.JsonView;
4346
import com.fasterxml.jackson.databind.ObjectMapper;
4447
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
@@ -200,6 +203,8 @@ protected AbstractOpenApiResource(String groupName, ObjectFactory<OpenAPIBuilder
200203
operationCustomizers.get().removeIf(Objects::isNull);
201204
this.operationCustomizers = operationCustomizers;
202205
this.actuatorProvider = actuatorProvider;
206+
if (springDocConfigProperties.isPreLoadingEnabled())
207+
Executors.newSingleThreadExecutor().execute(this::getOpenApi);
203208
}
204209

205210
/**
@@ -226,13 +231,13 @@ public static void addHiddenRestControllers(Class<?>... classes) {
226231
* @param classes the classes
227232
*/
228233
public static void addHiddenRestControllers(String... classes) {
229-
Set<Class<?>> hiddenClasses =new HashSet<>();
234+
Set<Class<?>> hiddenClasses = new HashSet<>();
230235
for (String aClass : classes) {
231236
try {
232237
hiddenClasses.add(Class.forName(aClass));
233238
}
234239
catch (ClassNotFoundException e) {
235-
LOGGER.warn("The following class doesn't exist and cannot be hidden: {}", aClass);
240+
LOGGER.warn("The following class doesn't exist and cannot be hidden: {}", aClass);
236241
}
237242
}
238243
HIDDEN_REST_CONTROLLERS.addAll(hiddenClasses);
@@ -257,8 +262,8 @@ protected synchronized OpenAPI getOpenApi() {
257262
Map<String, Object> findControllerAdvice = openAPIBuilder.getControllerAdviceMap();
258263
// calculate generic responses
259264
openApi = openAPIBuilder.getCalculatedOpenAPI();
260-
if (springDocConfigProperties.isOverrideWithGenericResponse() && !CollectionUtils.isEmpty(findControllerAdvice)){
261-
if(!CollectionUtils.isEmpty(mappingsMap))
265+
if (springDocConfigProperties.isOverrideWithGenericResponse() && !CollectionUtils.isEmpty(findControllerAdvice)) {
266+
if (!CollectionUtils.isEmpty(mappingsMap))
262267
findControllerAdvice.putAll(mappingsMap);
263268
responseBuilder.buildGenericResponse(openApi.getComponents(), findControllerAdvice);
264269
}
@@ -964,7 +969,7 @@ protected void initOpenAPIBuilder() {
964969
* @return the yaml mapper
965970
*/
966971
protected ObjectMapper getYamlMapper() {
967-
ObjectMapper objectMapper = Yaml.mapper();
972+
ObjectMapper objectMapper = Yaml.mapper();
968973
YAMLFactory factory = (YAMLFactory) objectMapper.getFactory();
969974
factory.configure(Feature.USE_NATIVE_TYPE_ID, false);
970975
return objectMapper;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ else if (calculatedOpenAPI.getInfo() == null) {
225225
* @return the open api
226226
*/
227227
public OpenAPI updateServers(OpenAPI openAPI) {
228-
if (!isServersPresent) // default server value
228+
if (!isServersPresent && serverBaseUrl!=null) // default server value
229229
{
230230
Server server = new Server().url(serverBaseUrl).description(DEFAULT_SERVER_DESCRIPTION);
231231
List<Server> servers = new ArrayList<>();

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ public class SpringDocConfigProperties {
130130
*/
131131
private boolean showLoginEndpoint;
132132

133+
/**
134+
* Allow for pre-loading OpenAPI
135+
*/
136+
private boolean preLoadingEnabled;
137+
133138
/**
134139
* Is use fqn boolean.
135140
*
@@ -472,6 +477,24 @@ public void setWriterWithDefaultPrettyPrinter(boolean writerWithDefaultPrettyPri
472477
this.writerWithDefaultPrettyPrinter = writerWithDefaultPrettyPrinter;
473478
}
474479

480+
/**
481+
* Sets pre loading enabled.
482+
*
483+
* @param preLoadingEnabled the pre loading enabled
484+
*/
485+
public void setPreLoadingEnabled(boolean preLoadingEnabled) {
486+
this.preLoadingEnabled = preLoadingEnabled;
487+
}
488+
489+
/**
490+
* Is pre loading enabled boolean.
491+
*
492+
* @return the boolean
493+
*/
494+
public boolean isPreLoadingEnabled() {
495+
return preLoadingEnabled;
496+
}
497+
475498
/**
476499
* The type Model converters.
477500
*/

springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/app18/SpringDocApp18Test.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
import test.org.springdoc.api.AbstractSpringDocTest;
2222

2323
import org.springframework.boot.autoconfigure.SpringBootApplication;
24+
import org.springframework.test.context.TestPropertySource;
2425

26+
@TestPropertySource(properties = "springdoc.pre-loading-enabled=true")
2527
public class SpringDocApp18Test extends AbstractSpringDocTest {
2628

2729
@SpringBootApplication

0 commit comments

Comments
 (0)