From 42dde42dbc15162d1cc6b8dd2d2581909951e74b Mon Sep 17 00:00:00 2001 From: romash1408 Date: Wed, 20 Jan 2021 11:28:52 +0700 Subject: [PATCH] Rework operation customizing to consider returned value. Fixes #1025 --- .../springdoc/api/AbstractOpenApiResource.java | 15 ++++++++++++--- .../core/customizers/OperationCustomizer.java | 3 +-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/springdoc-openapi-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java b/springdoc-openapi-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java index 359cbf475..101412229 100644 --- a/springdoc-openapi-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java +++ b/springdoc-openapi-common/src/main/java/org/springdoc/api/AbstractOpenApiResource.java @@ -400,7 +400,9 @@ protected void calculatePath(HandlerMethod handlerMethod, RouterOperation router buildCallbacks(openAPI, methodAttributes, operation, apiCallbacks); // allow for customisation - customiseOperation(operation, handlerMethod); + operation = customiseOperation(operation, handlerMethod); + if (operation == null) + continue; PathItem pathItemObject = buildPathItem(requestMethod, operation, operationPath, paths); paths.addPathItem(operationPath, pathItemObject); @@ -703,8 +705,15 @@ protected Set getDefaultAllowedHttpMethods() { * @return the operation */ protected Operation customiseOperation(Operation operation, HandlerMethod handlerMethod) { - operationCustomizers.ifPresent(customizers -> customizers.forEach(customizer -> customizer.customize(operation, handlerMethod))); - return operation; + if (!operationCustomizers.isPresent()) + return operation; + Operation customizedOperation = operation; + for (OperationCustomizer customizer : operationCustomizers.get()) { + customizedOperation = customizer.customize(customizedOperation, handlerMethod); + if (customizedOperation == null) + return null; + } + return customizedOperation; } /** diff --git a/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/OperationCustomizer.java b/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/OperationCustomizer.java index 4e7caf9da..214586473 100644 --- a/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/OperationCustomizer.java +++ b/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/OperationCustomizer.java @@ -37,8 +37,7 @@ public interface OperationCustomizer { * * @param operation input operation * @param handlerMethod original handler method - * @return customized operation + * @return customized operation or null to hide operation */ Operation customize(Operation operation, HandlerMethod handlerMethod); } -