Repository: springdoc/springdoc-openapi
Pull request #1706 (2022-06-13 16:34:40)

Add RouterOperationCustomizer
Summary
The RouterOperationCustomizer customizes the RouterOperation before the path is created so that it is reflected in the document.

Result
As a result, we can change the properties of router operation to give the user a point to customize the document before creating a path.

junoyoon: @bnasslahsen 

This PR is to prevent overwriting mutliple router operations having same path.
RouterOperationCustomizer is introduced for developers to customize routerOperation object properties such as Path.

See below to how to define the RouterOperationCustomizer.

https://github.com/springdoc/springdoc-openapi/pull/1706/files#diff-12f0ec82aa8f79cddb6f1649257873491e8c2daab92ba30d35b1b430954dacb3R19-R257

Please review this if you don't mind.

Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9892faaf1..908c325e4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,27 +4,6 @@ All notable changes to this project will be documented in this file.
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
-## [1.6.9] - 2022-05-22
-### Added
-- #1664 - Add Schema properties support in method-level @RequestBody
-- #1181 - Initial OpenAPI 3.1 support
-- #1651 - Ease group declaration through code or properties with actuators
-### Changed
-- upgrade to spring-boot 2.7.0
-- upgrade swagger-ui: 4.11.1
-- upgrade classgraph: 4.8.147
-- upgrade spring-native: 0.11.5
-- upgrade spring-cloud-function: 3.2.4
-### Fixed
-- #1663 - @Schema annotation with type String and allowableValues set doesn't generate enum drop-down in swagger-ui after upgrading from 1.6.6 (when Spring custom converter is used)
-- #1655 - OpenAPIService is using ObjectMapper without configured modules since SpringDoc 1.6.7.
-- #1648 - Tags with only name provided are being added to the openAPI.tags field. 
-- #1641 - ConcurrentModificationException when querying /v3/api-docs/{group} concurrently for different groups
-- #1634 - Generating doc for entities with map attribute does not work
-- #1633 - GroupedOpenApi.builder addOpenApiCustomiser execution order is reversed
-- #1630 - Remove repeated HttpSession 
-- #1659 - fix oauth redirection when used in spring-native 
-
 ## [1.6.8] - 2022-04-22
 ### Added
 - #1616 - Add global customizer and filters 
diff --git a/pom.xml b/pom.xml
index 140702fb7..e1a5dccf2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>org.springdoc</groupId>
 	<artifactId>springdoc-openapi</artifactId>
-	<version>1.6.10-SNAPSHOT</version>
+	<version>1.6.9-SNAPSHOT</version>
 	<packaging>pom</packaging>
 	<name>Spring openapi documentation</name>
 	<description>Spring openapi documentation</description>
@@ -33,7 +33,7 @@
 	<parent>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>2.7.0</version>
+		<version>2.6.7</version>
 	</parent>
 
 	<licenses>
@@ -102,7 +102,6 @@
 		<spring-native.version>0.11.5</spring-native.version>
 		<therapi-runtime-javadoc.version>0.13.0</therapi-runtime-javadoc.version>
 		<spring-cloud-function.version>3.2.4</spring-cloud-function.version>
-		<dependency-check.version>7.1.0</dependency-check.version>
 	</properties>
 
 	<dependencyManagement>
@@ -268,7 +267,6 @@
 			<plugin>
 				<groupId>org.owasp</groupId>
 				<artifactId>dependency-check-maven</artifactId>
-				<version>${dependency-check.version}</version>
 				<configuration>
 					<skipSystemScope>true</skipSystemScope>
 				</configuration>
diff --git a/springdoc-openapi-common/pom.xml b/springdoc-openapi-common/pom.xml
index ca97123c5..4ea1ba0e3 100644
--- a/springdoc-openapi-common/pom.xml
+++ b/springdoc-openapi-common/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>org.springdoc</groupId>
 		<artifactId>springdoc-openapi</artifactId>
-		<version>1.6.10-SNAPSHOT</version>
+		<version>1.6.9-SNAPSHOT</version>
 	</parent>
 	<artifactId>springdoc-openapi-common</artifactId>
 	<dependencies>
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 668695d35..a72628e99 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
@@ -84,6 +84,7 @@ import org.springdoc.core.annotations.RouterOperations;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OpenApiLocaleCustomizer;
 import org.springdoc.core.customizers.OperationCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 import org.springdoc.core.fn.AbstractRouterFunctionVisitor;
 import org.springdoc.core.fn.RouterFunctionData;
@@ -119,6 +120,7 @@ import static org.springframework.util.AntPathMatcher.DEFAULT_PATH_SEPARATOR;
  * The type Abstract open api resource.
  * @author bnasslahsen
  * @author kevinraddatz
+ * @author hyeonisism
  */
 public abstract class AbstractOpenApiResource extends SpecFilter {
 
@@ -177,6 +179,11 @@ public abstract class AbstractOpenApiResource extends SpecFilter {
 	 */
 	private final Optional<List<OperationCustomizer>> operationCustomizers;
 
+	/**
+	 * The RouterOperation customizers.
+	 */
+	private final Optional<List<RouterOperationCustomizer>> routerOperationCustomizers;
+
 	/**
 	 * The method filters to use.
 	 */
@@ -216,6 +223,7 @@ public abstract class AbstractOpenApiResource extends SpecFilter {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customisers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
@@ -225,6 +233,7 @@ public abstract class AbstractOpenApiResource extends SpecFilter {
 			GenericResponseService responseBuilder, OperationService operationParser,
 			Optional<List<OperationCustomizer>> operationCustomizers,
 			Optional<List<OpenApiCustomiser>> openApiCustomisers,
+			Optional<List<RouterOperationCustomizer>> routerOperationCustomizers,
 			Optional<List<OpenApiMethodFilter>> methodFilters,
 			SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
 		super();
@@ -235,6 +244,7 @@ public abstract class AbstractOpenApiResource extends SpecFilter {
 		this.responseBuilder = responseBuilder;
 		this.operationParser = operationParser;
 		this.openApiCustomisers = openApiCustomisers;
+		this.routerOperationCustomizers = routerOperationCustomizers;
 		this.methodFilters = methodFilters;
 		this.springDocProviders = springDocProviders;
 		//add the default customizers
@@ -381,6 +391,9 @@ public abstract class AbstractOpenApiResource extends SpecFilter {
 	 */
 	protected void calculatePath(HandlerMethod handlerMethod,
 			RouterOperation routerOperation, Locale locale, OpenAPI openAPI) {
+
+		routerOperation = customiseRouterOperation(routerOperation, handlerMethod);
+
 		String operationPath = routerOperation.getPath();
 		Set<RequestMethod> requestMethods = new HashSet<>(Arrays.asList(routerOperation.getMethods()));
 		io.swagger.v3.oas.annotations.Operation apiOperation = routerOperation.getOperation();
@@ -608,12 +621,15 @@ public abstract class AbstractOpenApiResource extends SpecFilter {
 	 * @param consumes the consumes
 	 * @param produces the produces
 	 * @param headers the headers
+	 * @param params the params
 	 * @param locale the locale
 	 * @param openAPI the open api
 	 */
 	protected void calculatePath(HandlerMethod handlerMethod, String operationPath,
-			Set<RequestMethod> requestMethods, String[] consumes, String[] produces, String[] headers, Locale locale, OpenAPI openAPI) {
-		this.calculatePath(handlerMethod, new RouterOperation(operationPath, requestMethods.toArray(new RequestMethod[requestMethods.size()]), consumes, produces, headers), locale, openAPI);
+			Set<RequestMethod> requestMethods, String[] consumes, String[] produces, String[] headers, String[] params, Locale locale, OpenAPI openAPI) {
+		this.calculatePath(handlerMethod,
+				new RouterOperation(operationPath, requestMethods.toArray(new RequestMethod[requestMethods.size()]), consumes, produces, headers, params),
+				locale, openAPI);
 	}
 
 	/**
@@ -794,7 +810,6 @@ public abstract class AbstractOpenApiResource extends SpecFilter {
 		return responseBodyAnnotation != null;
 	}
 
-
 	/**
 	 * Is rest controller boolean.
 	 *
@@ -849,6 +864,22 @@ public abstract class AbstractOpenApiResource extends SpecFilter {
 		return operation;
 	}
 
+	/**
+	 * Customise router operation
+	 * @param routerOperation
+	 * @param handlerMethod
+	 * @return the router operation
+	 */
+	protected RouterOperation customiseRouterOperation(RouterOperation routerOperation, HandlerMethod handlerMethod) {
+		if (routerOperationCustomizers.isPresent()) {
+			List<RouterOperationCustomizer> routerOperationCustomizerList = routerOperationCustomizers.get();
+			for (RouterOperationCustomizer routerOperationCustomizer : routerOperationCustomizerList) {
+				routerOperation = routerOperationCustomizer.customize(routerOperation, handlerMethod);
+			}
+		}
+		return routerOperation;
+	}
+
 	/**
 	 * Merge routers.
 	 *
diff --git a/springdoc-openapi-common/src/main/java/org/springdoc/core/GroupedOpenApi.java b/springdoc-openapi-common/src/main/java/org/springdoc/core/GroupedOpenApi.java
index c04adae14..a9980085e 100644
--- a/springdoc-openapi-common/src/main/java/org/springdoc/core/GroupedOpenApi.java
+++ b/springdoc-openapi-common/src/main/java/org/springdoc/core/GroupedOpenApi.java
@@ -31,6 +31,7 @@ import java.util.Objects;
 import org.apache.commons.lang3.StringUtils;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OperationCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 
 import org.springframework.util.CollectionUtils;
@@ -58,6 +59,11 @@ public class GroupedOpenApi {
 	 */
 	private List<OperationCustomizer> operationCustomizers;
 
+	/**
+	 * The Router Operation customizers.
+	 */
+	private List<RouterOperationCustomizer> routerOperationCustomizers;
+
 	/**
 	 * The Paths to match.
 	 */
@@ -120,6 +126,7 @@ public class GroupedOpenApi {
 		this.displayName = StringUtils.defaultIfEmpty(builder.displayName, this.group);
 		this.openApiCustomisers = Objects.requireNonNull(builder.openApiCustomisers);
 		this.operationCustomizers = Objects.requireNonNull(builder.operationCustomizers);
+		this.routerOperationCustomizers = Objects.requireNonNull(builder.routerOperationCustomizers);
 		this.openApiMethodFilters = Objects.requireNonNull(builder.methodFilters);
 		if (CollectionUtils.isEmpty(this.pathsToMatch)
 				&& CollectionUtils.isEmpty(this.packagesToScan)
@@ -242,6 +249,15 @@ public class GroupedOpenApi {
 		return openApiMethodFilters;
 	}
 
+	/**
+	 * Gets router operation customizers.
+	 *
+	 * @return the router operation customizers
+	 */
+	public List<RouterOperationCustomizer> getRouterOperationCustomizers() {
+		return routerOperationCustomizers;
+	}
+
 	/**
 	 * Gets display name.
 	 *
@@ -266,6 +282,11 @@ public class GroupedOpenApi {
 		 */
 		private final List<OperationCustomizer> operationCustomizers = new ArrayList<>();
 
+		/**
+		 * The Router Operation customizers.
+		 */
+		private final List<RouterOperationCustomizer> routerOperationCustomizers = new ArrayList<>();
+
 		/**
 		 * The methods filters to apply.
 		 */
@@ -433,6 +454,17 @@ public class GroupedOpenApi {
 			return this;
 		}
 
+		/**
+		 * Add router operation customizer builder
+		 *
+		 * @param routerOperationCustomizer the router operation customizer
+		 * @return the builder
+		 */
+		public Builder addRouterOperationCustomizer(RouterOperationCustomizer routerOperationCustomizer) {
+			this.routerOperationCustomizers.add(routerOperationCustomizer);
+			return this;
+		}
+
 		/**
 		 * Add method filter.
 		 *
diff --git a/springdoc-openapi-common/src/main/java/org/springdoc/core/SpringDocConfiguration.java b/springdoc-openapi-common/src/main/java/org/springdoc/core/SpringDocConfiguration.java
index 9b780be72..6a415637b 100644
--- a/springdoc-openapi-common/src/main/java/org/springdoc/core/SpringDocConfiguration.java
+++ b/springdoc-openapi-common/src/main/java/org/springdoc/core/SpringDocConfiguration.java
@@ -606,7 +606,7 @@ public class SpringDocConfiguration {
 	@Bean
 	@ConditionalOnMissingBean
 	@Lazy(false)
-	ObjectMapperProvider springDocObjectMapperProvider(SpringDocConfigProperties springDocConfigProperties){
+	ObjectMapperProvider objectMapperProvider(SpringDocConfigProperties springDocConfigProperties){
 		return new ObjectMapperProvider(springDocConfigProperties);
 	}
-}
+}
\ No newline at end of file
diff --git a/springdoc-openapi-common/src/main/java/org/springdoc/core/annotations/RouterOperation.java b/springdoc-openapi-common/src/main/java/org/springdoc/core/annotations/RouterOperation.java
index 1de7f19d8..d8984ecef 100644
--- a/springdoc-openapi-common/src/main/java/org/springdoc/core/annotations/RouterOperation.java
+++ b/springdoc-openapi-common/src/main/java/org/springdoc/core/annotations/RouterOperation.java
@@ -39,7 +39,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
  *
  * @author bnasslahsen
  */
-@Target({ ElementType.TYPE, ElementType.METHOD})
+@Target({ ElementType.TYPE, ElementType.METHOD })
 @Retention(RetentionPolicy.RUNTIME)
 @Inherited
 public @interface RouterOperation {
@@ -95,6 +95,14 @@ public @interface RouterOperation {
 	 */
 	String[] headers() default {};
 
+	/**
+	 * The parameters of the mapped request, narrowing the primary mapping.
+	 * Same format for any environment: a sequence of "myParam=myValue" style expressions,
+	 * with a request only mapped if each such parameter is found to have the given value.
+	 * @return the string [ ]
+	 */
+	String[] params() default {};
+
 	/**
 	 * The class of the Handler bean.
 	 * @return the class of the Bean
diff --git a/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java b/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java
index 6be158bf8..36b2064b7 100644
--- a/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java
+++ b/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/DataRestDelegatingMethodParameterCustomizer.java
@@ -26,7 +26,6 @@ import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Objects;
 import java.util.Optional;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -717,21 +716,8 @@ public class DataRestDelegatingMethodParameterCustomizer implements DelegatingMe
 		String defaultValue = null;
 		switch (parameterName) {
 			case "size":
-				if (pageableDefault != null) {
-					// "size" is aliased as "value"
-					int size = pageableDefault.size();
-					Object defaultSize;
-					try {
-						defaultSize = PageableDefault.class.getMethod("size").getDefaultValue();
-					} catch (NoSuchMethodException e) {
-						LOGGER.warn(e.getMessage());
-						defaultSize = null;
-					}
-					if (Objects.deepEquals(size, defaultSize)) {
-						size = pageableDefault.value();
-					}
-					defaultValue = String.valueOf(size);
-				}
+				if (pageableDefault != null)
+					defaultValue = String.valueOf(pageableDefault.size());
 				else if (isRepositoryRestConfigurationPresent())
 					defaultValue = String.valueOf(optionalRepositoryRestConfigurationProvider.get().getRepositoryRestConfiguration().getDefaultPageSize());
 				else if (isSpringDataWebPropertiesPresent())
diff --git a/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/RouterOperationCustomizer.java b/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/RouterOperationCustomizer.java
new file mode 100644
index 000000000..2bf93dc60
--- /dev/null
+++ b/springdoc-openapi-common/src/main/java/org/springdoc/core/customizers/RouterOperationCustomizer.java
@@ -0,0 +1,25 @@
+package org.springdoc.core.customizers;
+
+import org.springdoc.core.fn.RouterOperation;
+
+import org.springframework.web.method.HandlerMethod;
+
+/**
+ * Implement and register a bean of type {@link RouterOperationCustomizer} to customize an router operation
+ * based on the handler method input on default OpenAPI descriptions but not groups
+ *
+ * @author hyeonisism
+ */
+@FunctionalInterface
+public interface RouterOperationCustomizer {
+
+	/**
+	 * Customize router operation.
+	 *
+	 * @param routerOperation input operation
+	 * @param handlerMethod original handler method
+	 * @return customized router operation
+	 */
+	RouterOperation customize(RouterOperation routerOperation, HandlerMethod handlerMethod);
+
+}
diff --git a/springdoc-openapi-common/src/main/java/org/springdoc/core/fn/RouterFunctionData.java b/springdoc-openapi-common/src/main/java/org/springdoc/core/fn/RouterFunctionData.java
index 5c4c18b38..52aa744cf 100644
--- a/springdoc-openapi-common/src/main/java/org/springdoc/core/fn/RouterFunctionData.java
+++ b/springdoc-openapi-common/src/main/java/org/springdoc/core/fn/RouterFunctionData.java
@@ -62,6 +62,11 @@ public class RouterFunctionData {
 	 */
 	private List<String> headers = new ArrayList<>();
 
+	/**
+	 * The Params.
+	 */
+	private List<String> params = new ArrayList<>();
+
 	/**
 	 * The Query params.
 	 */
@@ -93,6 +98,7 @@ public class RouterFunctionData {
 		this.consumes = Arrays.asList(functionData.getConsumes());
 		this.produces = Arrays.asList(functionData.getProduces());
 		this.headers = Arrays.asList(functionData.getHeaders());
+		this.params = Arrays.asList(functionData.getParams());
 		this.queryParams = functionData.getQueryParams();
 		this.methods = functionData.getMethods();
 		this.attributes = functionData.getAttributes();
@@ -181,6 +187,20 @@ public class RouterFunctionData {
 		return consumes.toArray(new String[consumes.size()]);
 	}
 
+	/**
+	 * Get params string [ ].
+	 *
+	 * @return the string [ ]
+	 */
+	public String[] getParams() { return params.toArray(new String[params.size()]); }
+
+	/**
+	 * Add params.
+	 *
+	 * @param params the params
+	 */
+	public void addParams(String params) { if(StringUtils.isNotBlank(params)) this.params.add(params); }
+
 	/**
 	 * Add consumes.
 	 *
diff --git a/springdoc-openapi-common/src/main/java/org/springdoc/core/fn/RouterOperation.java b/springdoc-openapi-common/src/main/java/org/springdoc/core/fn/RouterOperation.java
index bd8149663..4fa8e314f 100644
--- a/springdoc-openapi-common/src/main/java/org/springdoc/core/fn/RouterOperation.java
+++ b/springdoc-openapi-common/src/main/java/org/springdoc/core/fn/RouterOperation.java
@@ -38,6 +38,7 @@ import static org.springdoc.core.Constants.OPERATION_ATTRIBUTE;
 /**
  * The type Router operation.
  * @author bnasslahsen
+ * @author hyeonisism
  */
 public class RouterOperation implements Comparable<RouterOperation> {
 
@@ -66,6 +67,11 @@ public class RouterOperation implements Comparable<RouterOperation> {
 	 */
 	private String[] headers;
 
+	/**
+	 * The Params.
+	 */
+	private String[] params;
+
 	/**
 	 * The Bean class.
 	 */
@@ -116,6 +122,7 @@ public class RouterOperation implements Comparable<RouterOperation> {
 		this.parameterTypes = routerOperationAnnotation.parameterTypes();
 		this.operation = routerOperationAnnotation.operation();
 		this.headers = routerOperationAnnotation.headers();
+		this.params = routerOperationAnnotation.params();
 	}
 
 	/**
@@ -134,6 +141,7 @@ public class RouterOperation implements Comparable<RouterOperation> {
 		this.parameterTypes = routerOperationAnnotation.parameterTypes();
 		this.operation = routerOperationAnnotation.operation();
 		this.headers = ArrayUtils.isEmpty(routerOperationAnnotation.headers()) ? routerFunctionData.getHeaders() : routerOperationAnnotation.headers();
+		this.params = routerOperationAnnotation.params();
 		this.queryParams = routerFunctionData.getQueryParams();
 	}
 
@@ -146,12 +154,13 @@ public class RouterOperation implements Comparable<RouterOperation> {
 	 * @param produces the produces
 	 * @param headers the headers
 	 */
-	public RouterOperation(String path, RequestMethod[] methods,String[] consumes, String[] produces, String[] headers) {
+	public RouterOperation(String path, RequestMethod[] methods, String[] consumes, String[] produces, String[] headers, String[] params) {
 		this.path = path;
 		this.methods = methods;
-		this.consumes=consumes;
-		this.produces=produces;
-		this.headers=headers;
+		this.consumes = consumes;
+		this.produces = produces;
+		this.headers = headers;
+		this.params = params;
 	}
 
 	/**
@@ -165,6 +174,7 @@ public class RouterOperation implements Comparable<RouterOperation> {
 		this.consumes = routerFunctionData.getConsumes();
 		this.produces = routerFunctionData.getProduces();
 		this.headers = routerFunctionData.getHeaders();
+		this.params = routerFunctionData.getParams();
 		this.queryParams = routerFunctionData.getQueryParams();
 
 		Map<String, Object> attributes = routerFunctionData.getAttributes();
@@ -369,6 +379,24 @@ public class RouterOperation implements Comparable<RouterOperation> {
 		this.queryParams = queryParams;
 	}
 
+	/**
+	 * Gets params.
+	 *
+	 * @return the params
+	 */
+	public String[] getParams() {
+		return this.params;
+	}
+
+	/**
+	 * Sets params.
+	 *
+	 * @param params
+	 */
+	public void setParams(String[] params) {
+		this.params = params;
+	}
+
 	/**
 	 * Gets operation model.
 	 *
diff --git a/springdoc-openapi-data-rest/pom.xml b/springdoc-openapi-data-rest/pom.xml
index e1c9d840e..fc4263cf4 100644
--- a/springdoc-openapi-data-rest/pom.xml
+++ b/springdoc-openapi-data-rest/pom.xml
@@ -4,7 +4,7 @@
 	<parent>
 		<artifactId>springdoc-openapi</artifactId>
 		<groupId>org.springdoc</groupId>
-		<version>1.6.10-SNAPSHOT</version>
+		<version>1.6.9-SNAPSHOT</version>
 	</parent>
 	<artifactId>springdoc-openapi-data-rest</artifactId>
 	<dependencies>
diff --git a/springdoc-openapi-data-rest/src/main/java/org/springdoc/data/rest/core/DataRestRouterOperationService.java b/springdoc-openapi-data-rest/src/main/java/org/springdoc/data/rest/core/DataRestRouterOperationService.java
index 4ad303276..e76f8cefd 100644
--- a/springdoc-openapi-data-rest/src/main/java/org/springdoc/data/rest/core/DataRestRouterOperationService.java
+++ b/springdoc-openapi-data-rest/src/main/java/org/springdoc/data/rest/core/DataRestRouterOperationService.java
@@ -279,7 +279,7 @@ public class DataRestRouterOperationService {
 			MethodResourceMapping methodResourceMapping, HandlerMethod handlerMethod,
 			RequestMethod requestMethod, ResourceMetadata resourceMetadata, String
 			operationPath, ControllerType controllerType) {
-		RouterOperation routerOperation = new RouterOperation(operationPath, new RequestMethod[] { requestMethod }, null, null, null);
+		RouterOperation routerOperation = new RouterOperation(operationPath, new RequestMethod[] { requestMethod }, null, null, null, null);
 		MethodAttributes methodAttributes = new MethodAttributes(springDocConfigProperties.getDefaultConsumesMediaType(), springDocConfigProperties.getDefaultProducesMediaType(), dataRestRepository.getLocale());
 		methodAttributes.calculateConsumesProduces(handlerMethod.getMethod());
 		routerOperation.setConsumes(methodAttributes.getMethodConsumes());
diff --git a/springdoc-openapi-groovy/pom.xml b/springdoc-openapi-groovy/pom.xml
index 7236a7b16..51421a3cf 100644
--- a/springdoc-openapi-groovy/pom.xml
+++ b/springdoc-openapi-groovy/pom.xml
@@ -4,7 +4,7 @@
 	<parent>
 		<artifactId>springdoc-openapi</artifactId>
 		<groupId>org.springdoc</groupId>
-		<version>1.6.10-SNAPSHOT</version>
+		<version>1.6.9-SNAPSHOT</version>
 	</parent>
 	<artifactId>springdoc-openapi-groovy</artifactId>
 	<dependencies>
diff --git a/springdoc-openapi-hateoas/pom.xml b/springdoc-openapi-hateoas/pom.xml
index e79b656ab..51dc55544 100644
--- a/springdoc-openapi-hateoas/pom.xml
+++ b/springdoc-openapi-hateoas/pom.xml
@@ -4,7 +4,7 @@
 	<parent>
 		<artifactId>springdoc-openapi</artifactId>
 		<groupId>org.springdoc</groupId>
-		<version>1.6.10-SNAPSHOT</version>
+		<version>1.6.9-SNAPSHOT</version>
 	</parent>
 	<artifactId>springdoc-openapi-hateoas</artifactId>
 	<dependencies>
diff --git a/springdoc-openapi-javadoc/pom.xml b/springdoc-openapi-javadoc/pom.xml
index 75b322277..3c8cb725f 100644
--- a/springdoc-openapi-javadoc/pom.xml
+++ b/springdoc-openapi-javadoc/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<artifactId>springdoc-openapi</artifactId>
 		<groupId>org.springdoc</groupId>
-		<version>1.6.10-SNAPSHOT</version>
+		<version>1.6.9-SNAPSHOT</version>
 	</parent>
 	<modelVersion>4.0.0</modelVersion>
 
diff --git a/springdoc-openapi-kotlin/pom.xml b/springdoc-openapi-kotlin/pom.xml
index 56b4f401a..3464148f3 100644
--- a/springdoc-openapi-kotlin/pom.xml
+++ b/springdoc-openapi-kotlin/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>org.springdoc</groupId>
 		<artifactId>springdoc-openapi</artifactId>
-		<version>1.6.10-SNAPSHOT</version>
+		<version>1.6.9-SNAPSHOT</version>
 	</parent>
     <properties>
 		<spring.version>5.3.6</spring.version>
diff --git a/springdoc-openapi-kotlin/src/main/java/org/springdoc/kotlin/SpringDocKotlinConfiguration.java b/springdoc-openapi-kotlin/src/main/java/org/springdoc/kotlin/SpringDocKotlinConfiguration.java
index 6f8dffb75..6bb79f35d 100644
--- a/springdoc-openapi-kotlin/src/main/java/org/springdoc/kotlin/SpringDocKotlinConfiguration.java
+++ b/springdoc-openapi-kotlin/src/main/java/org/springdoc/kotlin/SpringDocKotlinConfiguration.java
@@ -23,10 +23,8 @@
 package org.springdoc.kotlin;
 
 import com.fasterxml.jackson.module.kotlin.KotlinModule;
-import io.swagger.v3.oas.models.media.ByteArraySchema;
 import kotlin.Deprecated;
 import kotlin.coroutines.Continuation;
-import kotlin.jvm.internal.Intrinsics;
 import org.springdoc.core.providers.ObjectMapperProvider;
 
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -53,9 +51,7 @@ public class SpringDocKotlinConfiguration {
 	 * @param objectMapperProvider the object mapper provider
 	 */
 	public SpringDocKotlinConfiguration(ObjectMapperProvider objectMapperProvider) {
-		getConfig()
-				.addRequestWrapperToIgnore(Continuation.class)
-				.replaceWithSchema(byte[].class, new ByteArraySchema())
+		getConfig().addRequestWrapperToIgnore(Continuation.class)
 				.addDeprecatedType(Deprecated.class);
 		objectMapperProvider.jsonMapper().registerModule( new KotlinModule.Builder().build());
 	}
diff --git a/springdoc-openapi-native/pom.xml b/springdoc-openapi-native/pom.xml
index dd44f21e4..7c04d34b8 100644
--- a/springdoc-openapi-native/pom.xml
+++ b/springdoc-openapi-native/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<artifactId>springdoc-openapi</artifactId>
 		<groupId>org.springdoc</groupId>
-		<version>1.6.10-SNAPSHOT</version>
+		<version>1.6.9-SNAPSHOT</version>
 	</parent>
 	<modelVersion>4.0.0</modelVersion>
 
diff --git a/springdoc-openapi-security/pom.xml b/springdoc-openapi-security/pom.xml
index cdc60e658..a396d16ab 100644
--- a/springdoc-openapi-security/pom.xml
+++ b/springdoc-openapi-security/pom.xml
@@ -4,7 +4,7 @@
 	<parent>
 		<artifactId>springdoc-openapi</artifactId>
 		<groupId>org.springdoc</groupId>
-		<version>1.6.10-SNAPSHOT</version>
+		<version>1.6.9-SNAPSHOT</version>
 	</parent>
 	<artifactId>springdoc-openapi-security</artifactId>
 	<properties>
diff --git a/springdoc-openapi-ui/pom.xml b/springdoc-openapi-ui/pom.xml
index 7ed9000fd..970ce15ea 100644
--- a/springdoc-openapi-ui/pom.xml
+++ b/springdoc-openapi-ui/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>org.springdoc</groupId>
 		<artifactId>springdoc-openapi</artifactId>
-		<version>1.6.10-SNAPSHOT</version>
+		<version>1.6.9-SNAPSHOT</version>
 	</parent>
 	<artifactId>springdoc-openapi-ui</artifactId>
 	<dependencies>
diff --git a/springdoc-openapi-webflux-core/pom.xml b/springdoc-openapi-webflux-core/pom.xml
index 2acede5c4..c5b51fafd 100644
--- a/springdoc-openapi-webflux-core/pom.xml
+++ b/springdoc-openapi-webflux-core/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>org.springdoc</groupId>
 		<artifactId>springdoc-openapi</artifactId>
-		<version>1.6.10-SNAPSHOT</version>
+		<version>1.6.9-SNAPSHOT</version>
 	</parent>
 	<artifactId>springdoc-openapi-webflux-core</artifactId>
 	<dependencies>
diff --git a/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/MultipleOpenApiResource.java b/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/MultipleOpenApiResource.java
index 30c9cc8e0..17c61cd4b 100644
--- a/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/MultipleOpenApiResource.java
+++ b/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/MultipleOpenApiResource.java
@@ -162,6 +162,7 @@ public abstract class MultipleOpenApiResource implements InitializingBean, Appli
 					operationParser,
 					Optional.of(item.getOperationCustomizers()),
 					Optional.of(item.getOpenApiCustomisers()),
+					Optional.of(item.getRouterOperationCustomizers()),
 					Optional.of(item.getOpenApiMethodFilters()),
 					springDocConfigProperties,
 					springDocProviders
@@ -174,6 +175,7 @@ public abstract class MultipleOpenApiResource implements InitializingBean, Appli
 					operationParser,
 					Optional.of(item.getOperationCustomizers()),
 					Optional.of(item.getOpenApiCustomisers()),
+					Optional.of(item.getRouterOperationCustomizers()),
 					Optional.of(item.getOpenApiMethodFilters()),
 					springDocConfigProperties,
 					springDocProviders);
diff --git a/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiActuatorResource.java b/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiActuatorResource.java
index 282939ab3..0f618ea13 100644
--- a/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiActuatorResource.java
+++ b/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiActuatorResource.java
@@ -37,6 +37,7 @@ import org.springdoc.core.SpringDocConfigProperties;
 import org.springdoc.core.SpringDocProviders;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OperationCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 import reactor.core.publisher.Mono;
 
@@ -70,12 +71,13 @@ public class OpenApiActuatorResource extends OpenApiResource {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customisers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
 	 */
-	public OpenApiActuatorResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
-		super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+	public OpenApiActuatorResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<RouterOperationCustomizer>> routerOperationCustomizers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
+		super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 	/**
@@ -87,12 +89,13 @@ public class OpenApiActuatorResource extends OpenApiResource {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customisers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
 	 */
-	public OpenApiActuatorResource(ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
-		super(openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+	public OpenApiActuatorResource(ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<RouterOperationCustomizer>> routerOperationCustomizers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
+		super(openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 	/**
diff --git a/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiResource.java b/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiResource.java
index 190ae9dda..665cfdeab 100644
--- a/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiResource.java
+++ b/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiResource.java
@@ -45,6 +45,7 @@ import org.springdoc.core.SpringDocConfigProperties;
 import org.springdoc.core.SpringDocProviders;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OperationCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 import org.springdoc.core.providers.ActuatorProvider;
 import org.springdoc.core.providers.SpringWebProvider;
@@ -78,6 +79,7 @@ public abstract class OpenApiResource extends AbstractOpenApiResource {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customizers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
@@ -86,10 +88,11 @@ public abstract class OpenApiResource extends AbstractOpenApiResource {
 			GenericResponseService responseBuilder, OperationService operationParser,
 			Optional<List<OperationCustomizer>> operationCustomizers,
 			Optional<List<OpenApiCustomiser>> openApiCustomisers,
+			Optional<List<RouterOperationCustomizer>> routerOperationCustomizers,
 			Optional<List<OpenApiMethodFilter>> methodFilters,
 			SpringDocConfigProperties springDocConfigProperties,
 			SpringDocProviders springDocProviders) {
-		super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+		super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 	/**
@@ -101,6 +104,7 @@ public abstract class OpenApiResource extends AbstractOpenApiResource {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customizers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
@@ -109,10 +113,11 @@ public abstract class OpenApiResource extends AbstractOpenApiResource {
 			GenericResponseService responseBuilder, OperationService operationParser,
 			Optional<List<OperationCustomizer>> operationCustomizers,
 			Optional<List<OpenApiCustomiser>> openApiCustomisers,
+			Optional<List<RouterOperationCustomizer>> routerOperationCustomizers,
 			Optional<List<OpenApiMethodFilter>> methodFilters,
 			SpringDocConfigProperties springDocConfigProperties,
 			SpringDocProviders springDocProviders) {
-		super(DEFAULT_GROUP_NAME, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+		super(DEFAULT_GROUP_NAME, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 
@@ -195,13 +200,14 @@ public abstract class OpenApiResource extends AbstractOpenApiResource {
 					String[] produces = requestMappingInfo.getProducesCondition().getProducibleMediaTypes().stream().map(MimeType::toString).toArray(String[]::new);
 					String[] consumes = requestMappingInfo.getConsumesCondition().getConsumableMediaTypes().stream().map(MimeType::toString).toArray(String[]::new);
 					String[] headers = requestMappingInfo.getHeadersCondition().getExpressions().stream().map(Object::toString).toArray(String[]::new);
+					String[] params = requestMappingInfo.getParamsCondition().getExpressions().stream().map(Object::toString).toArray(String[]::new);
 					if ((isRestController(restControllers, handlerMethod, operationPath) || isActuatorRestController(operationPath, handlerMethod))
 							&& isFilterCondition(handlerMethod, operationPath, produces, consumes, headers)) {
 						Set<RequestMethod> requestMethods = requestMappingInfo.getMethodsCondition().getMethods();
 						// default allowed requestmethods
 						if (requestMethods.isEmpty())
 							requestMethods = this.getDefaultAllowedHttpMethods();
-						calculatePath(handlerMethod, operationPath, requestMethods, consumes, produces, headers, locale, openAPI);
+						calculatePath(handlerMethod, operationPath, requestMethods, consumes, produces, headers, params, locale, openAPI);
 					}
 				}
 			}
diff --git a/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiWebfluxResource.java b/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiWebfluxResource.java
index 714e7fc7c..d7d2dd58a 100644
--- a/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiWebfluxResource.java
+++ b/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/api/OpenApiWebfluxResource.java
@@ -37,6 +37,7 @@ import org.springdoc.core.SpringDocConfigProperties;
 import org.springdoc.core.SpringDocProviders;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OperationCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 import org.springdoc.core.providers.SpringWebProvider;
 import reactor.core.publisher.Mono;
@@ -71,12 +72,13 @@ public class OpenApiWebfluxResource extends OpenApiResource {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customizers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
 	 */
-	public OpenApiWebfluxResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
-		super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+	public OpenApiWebfluxResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<RouterOperationCustomizer>> routerOperationCustomizers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
+		super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 	/**
@@ -88,13 +90,14 @@ public class OpenApiWebfluxResource extends OpenApiResource {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customizers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
 	 */
 	@Autowired
-	public OpenApiWebfluxResource(ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers,Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
-		super(openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers,methodFilters, springDocConfigProperties, springDocProviders);
+	public OpenApiWebfluxResource(ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<RouterOperationCustomizer>> routerOperationCustomizers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
+		super(openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers,routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 	/**
diff --git a/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/core/SpringDocWebFluxConfiguration.java b/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/core/SpringDocWebFluxConfiguration.java
index b046d6158..856d4bb20 100644
--- a/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/core/SpringDocWebFluxConfiguration.java
+++ b/springdoc-openapi-webflux-core/src/main/java/org/springdoc/webflux/core/SpringDocWebFluxConfiguration.java
@@ -38,6 +38,7 @@ import org.springdoc.core.SpringDocProviders;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OperationCustomizer;
 import org.springdoc.core.customizers.ParameterCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 import org.springdoc.core.providers.ActuatorProvider;
 import org.springdoc.core.providers.ObjectMapperProvider;
@@ -86,6 +87,7 @@ public class SpringDocWebFluxConfiguration {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customizers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
@@ -99,12 +101,13 @@ public class SpringDocWebFluxConfiguration {
 			GenericResponseService responseBuilder, OperationService operationParser,
 			Optional<List<OperationCustomizer>> operationCustomizers,
 			Optional<List<OpenApiCustomiser>> openApiCustomisers,
+			Optional<List<RouterOperationCustomizer>> routerOperationCustomizers,
 			Optional<List<OpenApiMethodFilter>> methodFilters,
 			SpringDocConfigProperties springDocConfigProperties,
 			SpringDocProviders springDocProviders) {
 		return new OpenApiWebfluxResource(openAPIBuilderObjectFactory, requestBuilder,
 				responseBuilder, operationParser, operationCustomizers,
-				openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+				openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 	/**
@@ -214,6 +217,7 @@ public class SpringDocWebFluxConfiguration {
 		 * @param operationParser the operation parser
 		 * @param operationCustomizers the operation customizers
 		 * @param openApiCustomisers the open api customisers
+		 * @param routerOperationCustomizers the router operation customizers
 		 * @param methodFilters the method filters
 		 * @param springDocConfigProperties the spring doc config properties
 		 * @param springDocProviders the spring doc providers
@@ -228,12 +232,13 @@ public class SpringDocWebFluxConfiguration {
 				GenericResponseService responseBuilder, OperationService operationParser,
 				Optional<List<OperationCustomizer>> operationCustomizers,
 				Optional<List<OpenApiCustomiser>> openApiCustomisers,
+				Optional<List<RouterOperationCustomizer>> routerOperationCustomizers,
 				Optional<List<OpenApiMethodFilter>> methodFilters,
 				SpringDocConfigProperties springDocConfigProperties,
 				SpringDocProviders springDocProviders) {
 			return new OpenApiActuatorResource(openAPIBuilderObjectFactory, requestBuilder,
 					responseBuilder, operationParser,operationCustomizers,
-					openApiCustomisers, methodFilters,  springDocConfigProperties, springDocProviders);
+					openApiCustomisers, routerOperationCustomizers, methodFilters,  springDocConfigProperties, springDocProviders);
 		}
 	}
 }
diff --git a/springdoc-openapi-webflux-ui/pom.xml b/springdoc-openapi-webflux-ui/pom.xml
index 48c5f3f61..df6de630b 100644
--- a/springdoc-openapi-webflux-ui/pom.xml
+++ b/springdoc-openapi-webflux-ui/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>org.springdoc</groupId>
 		<artifactId>springdoc-openapi</artifactId>
-		<version>1.6.10-SNAPSHOT</version>
+		<version>1.6.9-SNAPSHOT</version>
 	</parent>
 	<artifactId>springdoc-openapi-webflux-ui</artifactId>
 	<dependencies>
diff --git a/springdoc-openapi-webmvc-core/pom.xml b/springdoc-openapi-webmvc-core/pom.xml
index 0024bbc4c..700bc37a4 100644
--- a/springdoc-openapi-webmvc-core/pom.xml
+++ b/springdoc-openapi-webmvc-core/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>org.springdoc</groupId>
 		<artifactId>springdoc-openapi</artifactId>
-		<version>1.6.10-SNAPSHOT</version>
+		<version>1.6.9-SNAPSHOT</version>
 	</parent>
 	<artifactId>springdoc-openapi-webmvc-core</artifactId>
 	<dependencies>
diff --git a/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/MultipleOpenApiResource.java b/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/MultipleOpenApiResource.java
index 4b59ba3e8..e078d6e1a 100644
--- a/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/MultipleOpenApiResource.java
+++ b/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/MultipleOpenApiResource.java
@@ -161,6 +161,7 @@ public abstract class MultipleOpenApiResource implements InitializingBean, Appli
 					operationParser,
 					Optional.of(item.getOperationCustomizers()),
 					Optional.of(item.getOpenApiCustomisers()),
+					Optional.of(item.getRouterOperationCustomizers()),
 					Optional.of(item.getOpenApiMethodFilters()),
 					springDocConfigProperties, springDocProviders
 
@@ -173,6 +174,7 @@ public abstract class MultipleOpenApiResource implements InitializingBean, Appli
 					operationParser,
 					Optional.of(item.getOperationCustomizers()),
 					Optional.of(item.getOpenApiCustomisers()),
+					Optional.of(item.getRouterOperationCustomizers()),
 					Optional.of(item.getOpenApiMethodFilters()),
 					springDocConfigProperties, springDocProviders
 			);
diff --git a/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiActuatorResource.java b/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiActuatorResource.java
index 69fa04490..dec459d52 100644
--- a/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiActuatorResource.java
+++ b/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiActuatorResource.java
@@ -38,6 +38,7 @@ import org.springdoc.core.SpringDocConfigProperties;
 import org.springdoc.core.SpringDocProviders;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OperationCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 
 import org.springframework.beans.factory.ObjectFactory;
@@ -68,6 +69,7 @@ public class OpenApiActuatorResource extends OpenApiResource {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customizers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
@@ -77,10 +79,11 @@ public class OpenApiActuatorResource extends OpenApiResource {
 			OperationService operationParser,
 			Optional<List<OperationCustomizer>> operationCustomizers,
 			Optional<List<OpenApiCustomiser>> openApiCustomisers,
+			Optional<List<RouterOperationCustomizer>> routerOperationCustomizers,
 			Optional<List<OpenApiMethodFilter>> methodFilters,
 			SpringDocConfigProperties springDocConfigProperties,
 			SpringDocProviders springDocProviders) {
-		super(openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+		super(openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 	/**
@@ -93,6 +96,7 @@ public class OpenApiActuatorResource extends OpenApiResource {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customizers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
@@ -100,9 +104,9 @@ public class OpenApiActuatorResource extends OpenApiResource {
 	public OpenApiActuatorResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory,
 			AbstractRequestService requestBuilder, GenericResponseService responseBuilder,
 			OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers,
-			Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties,
+			Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<RouterOperationCustomizer>> routerOperationCustomizers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties,
 			SpringDocProviders springDocProviders) {
-		super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers,methodFilters,
+		super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters,
 				springDocConfigProperties, springDocProviders);
 	}
 
diff --git a/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiResource.java b/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiResource.java
index 218ddd73a..ea0c40b56 100644
--- a/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiResource.java
+++ b/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiResource.java
@@ -47,6 +47,7 @@ import org.springdoc.core.SpringDocConfigProperties;
 import org.springdoc.core.SpringDocProviders;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OperationCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 import org.springdoc.core.fn.RouterOperation;
 import org.springdoc.core.providers.ActuatorProvider;
@@ -81,6 +82,7 @@ public abstract class OpenApiResource extends AbstractOpenApiResource {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customisers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
@@ -89,10 +91,11 @@ public abstract class OpenApiResource extends AbstractOpenApiResource {
 			GenericResponseService responseBuilder, OperationService operationParser,
 			Optional<List<OperationCustomizer>> operationCustomizers,
 			Optional<List<OpenApiCustomiser>> openApiCustomisers,
+			Optional<List<RouterOperationCustomizer>> routerOperationCustomizers,
 			Optional<List<OpenApiMethodFilter>> methodFilters,
 			SpringDocConfigProperties springDocConfigProperties,
 			SpringDocProviders springDocProviders) {
-		super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+		super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 	/**
@@ -104,6 +107,7 @@ public abstract class OpenApiResource extends AbstractOpenApiResource {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customisers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
@@ -112,10 +116,11 @@ public abstract class OpenApiResource extends AbstractOpenApiResource {
 			GenericResponseService responseBuilder, OperationService operationParser,
 			Optional<List<OperationCustomizer>> operationCustomizers,
 			Optional<List<OpenApiCustomiser>> openApiCustomisers,
+			Optional<List<RouterOperationCustomizer>> routerOperationCustomizers,
 			Optional<List<OpenApiMethodFilter>> methodFilters,
 			SpringDocConfigProperties springDocConfigProperties,
 			SpringDocProviders springDocProviders) {
-		super(DEFAULT_GROUP_NAME, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+		super(DEFAULT_GROUP_NAME, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 	/**
@@ -219,13 +224,14 @@ public abstract class OpenApiResource extends AbstractOpenApiResource {
 						String[] produces = requestMappingInfo.getProducesCondition().getProducibleMediaTypes().stream().map(MimeType::toString).toArray(String[]::new);
 						String[] consumes = requestMappingInfo.getConsumesCondition().getConsumableMediaTypes().stream().map(MimeType::toString).toArray(String[]::new);
 						String[] headers = requestMappingInfo.getHeadersCondition().getExpressions().stream().map(Object::toString).toArray(String[]::new);
+						String[] params = requestMappingInfo.getParamsCondition().getExpressions().stream().map(Object::toString).toArray(String[]::new);
 						if ((isRestController(restControllers, handlerMethod, operationPath) || isActuatorRestController(operationPath, handlerMethod))
 								&& isFilterCondition(handlerMethod, operationPath, produces, consumes, headers)) {
 							Set<RequestMethod> requestMethods = requestMappingInfo.getMethodsCondition().getMethods();
 							// default allowed requestmethods
 							if (requestMethods.isEmpty())
 								requestMethods = this.getDefaultAllowedHttpMethods();
-							calculatePath(handlerMethod, operationPath, requestMethods, consumes, produces , headers, locale, openAPI);
+							calculatePath(handlerMethod, operationPath, requestMethods, consumes, produces , headers, params, locale, openAPI);
 						}
 					}
 				}
diff --git a/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiWebMvcResource.java b/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiWebMvcResource.java
index 88efe8203..543e67c5c 100644
--- a/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiWebMvcResource.java
+++ b/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/api/OpenApiWebMvcResource.java
@@ -39,6 +39,7 @@ import org.springdoc.core.SpringDocConfigProperties;
 import org.springdoc.core.SpringDocProviders;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OperationCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 import org.springdoc.core.providers.SpringWebProvider;
 
@@ -70,12 +71,13 @@ public class OpenApiWebMvcResource extends OpenApiResource {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customizers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
 	 */
-	public OpenApiWebMvcResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
-		super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+	public OpenApiWebMvcResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<RouterOperationCustomizer>> routerOperationCustomizers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
+		super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, routerOperationCustomizers ,methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 	/**
@@ -87,13 +89,14 @@ public class OpenApiWebMvcResource extends OpenApiResource {
 	 * @param operationParser the operation parser
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customizers
 	 * @param methodFilters the method filters
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param springDocProviders the spring doc providers
 	 */
 	@Autowired
-	public OpenApiWebMvcResource(ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
-		super(openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+	public OpenApiWebMvcResource(ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<RouterOperationCustomizer>> routerOperationCustomizers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
+		super(openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 	/**
diff --git a/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/core/SpringDocWebMvcConfiguration.java b/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/core/SpringDocWebMvcConfiguration.java
index 4121bc358..f32bd618e 100644
--- a/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/core/SpringDocWebMvcConfiguration.java
+++ b/springdoc-openapi-webmvc-core/src/main/java/org/springdoc/webmvc/core/SpringDocWebMvcConfiguration.java
@@ -38,6 +38,7 @@ import org.springdoc.core.SpringDocProviders;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OperationCustomizer;
 import org.springdoc.core.customizers.ParameterCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 import org.springdoc.core.providers.ActuatorProvider;
 import org.springdoc.core.providers.SpringWebProvider;
@@ -94,6 +95,7 @@ public class SpringDocWebMvcConfiguration {
 	 * @param springDocConfigProperties the spring doc config properties
 	 * @param operationCustomizers the operation customizers
 	 * @param openApiCustomisers the open api customisers
+	 * @param routerOperationCustomizers the router operation customisers
 	 * @param methodFilters the method filters
 	 * @param springDocProviders the spring doc providers
 	 * @return the open api resource
@@ -107,11 +109,12 @@ public class SpringDocWebMvcConfiguration {
 			SpringDocConfigProperties springDocConfigProperties,
 			Optional<List<OperationCustomizer>> operationCustomizers,
 			Optional<List<OpenApiCustomiser>> openApiCustomisers,
+			Optional<List<RouterOperationCustomizer>> routerOperationCustomizers,
 			Optional<List<OpenApiMethodFilter>> methodFilters,
 			SpringDocProviders springDocProviders) {
 		return new OpenApiWebMvcResource(openAPIBuilderObjectFactory, requestBuilder,
 				responseBuilder, operationParser, operationCustomizers,
-				openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+				openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 	}
 
 	/**
@@ -228,6 +231,7 @@ public class SpringDocWebMvcConfiguration {
 		 * @param springDocConfigProperties the spring doc config properties
 		 * @param operationCustomizers the operation customizers
 		 * @param openApiCustomisers the open api customisers
+		 * @param routerOperationCustomizers the router operation customisers
 		 * @param methodFilters the method filters
 		 * @param springDocProviders the spring doc providers
 		 * @return the open api actuator resource
@@ -242,12 +246,13 @@ public class SpringDocWebMvcConfiguration {
 				SpringDocConfigProperties springDocConfigProperties,
 				Optional<List<OperationCustomizer>> operationCustomizers,
 				Optional<List<OpenApiCustomiser>> openApiCustomisers,
+				Optional<List<RouterOperationCustomizer>> routerOperationCustomizers,
 				Optional<List<OpenApiMethodFilter>> methodFilters,
 				SpringDocProviders springDocProviders) {
 			return new OpenApiActuatorResource(openAPIBuilderObjectFactory,
 					requestBuilder, responseBuilder,
 					operationParser,
-					operationCustomizers, openApiCustomisers, methodFilters,
+					operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters,
 					springDocConfigProperties, springDocProviders);
 		}
 	}


Test patch:
diff --git a/springdoc-openapi-common/src/test/java/org/springdoc/api/AbstractOpenApiResourceTest.java b/springdoc-openapi-common/src/test/java/org/springdoc/api/AbstractOpenApiResourceTest.java
index f2059ab07..20ba4332f 100644
--- a/springdoc-openapi-common/src/test/java/org/springdoc/api/AbstractOpenApiResourceTest.java
+++ b/springdoc-openapi-common/src/test/java/org/springdoc/api/AbstractOpenApiResourceTest.java
@@ -53,6 +53,7 @@ import org.springdoc.core.SpringDocConfigProperties;
 import org.springdoc.core.SpringDocProviders;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OperationCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.customizers.ServerBaseUrlCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 import org.springdoc.core.fn.RouterOperation;
@@ -136,6 +137,7 @@ class AbstractOpenApiResourceTest {
 				Optional.empty(),
 				Optional.empty(),
 				Optional.empty(),
+				Optional.empty(),
 				new SpringDocConfigProperties(),
 				springDocProviders
 		);
@@ -207,6 +209,7 @@ class AbstractOpenApiResourceTest {
 				Optional.empty(),
 				Optional.of(singletonList(openApiCustomiser)),
 				Optional.empty(),
+				Optional.empty(),
 				properties, springDocProviders
 		);
 
@@ -241,6 +244,7 @@ class AbstractOpenApiResourceTest {
 				Optional.empty(),
 				Optional.empty(),
 				Optional.empty(),
+				Optional.empty(),
 				properties,
 				springDocProviders
 		);
@@ -290,8 +294,8 @@ class AbstractOpenApiResourceTest {
 
 	private static class EmptyPathsOpenApiResource extends AbstractOpenApiResource {
 
-		EmptyPathsOpenApiResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
-			super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+		EmptyPathsOpenApiResource(String groupName, ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder, OperationService operationParser, Optional<List<OperationCustomizer>> operationCustomizers, Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<RouterOperationCustomizer>> routerOpeationCustomizers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocConfigProperties springDocConfigProperties, SpringDocProviders springDocProviders) {
+			super(groupName, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser, operationCustomizers, openApiCustomisers, routerOpeationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 		}
 
 		@Override
diff --git a/springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app13/HelloController.java b/springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app13/HelloController.java
index 0cd0629fa..faf772467 100644
--- a/springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app13/HelloController.java
+++ b/springdoc-openapi-data-rest/src/test/java/test/org/springdoc/api/app13/HelloController.java
@@ -57,10 +57,4 @@ public class HelloController {
 	@ParameterObject Pageable pageable) {
 		return "bla";
 	}
-
-	@GetMapping("/test4")
-	public String getPatientList4(@PageableDefault(100)
-	@ParameterObject Pageable pageable) {
-		return "bla";
-	}
 }
diff --git a/springdoc-openapi-data-rest/src/test/resources/results/app13.json b/springdoc-openapi-data-rest/src/test/resources/results/app13.json
index 5716a081a..dbf118026 100644
--- a/springdoc-openapi-data-rest/src/test/resources/results/app13.json
+++ b/springdoc-openapi-data-rest/src/test/resources/results/app13.json
@@ -11,62 +11,6 @@
     }
   ],
   "paths": {
-    "/test4": {
-      "get": {
-        "tags": [
-          "hello-controller"
-        ],
-        "operationId": "getPatientList4",
-        "parameters": [
-          {
-            "name": "page",
-            "in": "query",
-            "description": "Zero-based page index (0..N)",
-            "required": false,
-            "schema": {
-              "minimum": 0,
-              "type": "integer",
-              "default": 0
-            }
-          },
-          {
-            "name": "size",
-            "in": "query",
-            "description": "The size of the page to be returned",
-            "required": false,
-            "schema": {
-              "minimum": 1,
-              "type": "integer",
-              "default": 100
-            }
-          },
-          {
-            "name": "sort",
-            "in": "query",
-            "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.",
-            "required": false,
-            "schema": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              }
-            }
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "OK",
-            "content": {
-              "application/hal+json": {
-                "schema": {
-                  "type": "string"
-                }
-              }
-            }
-          }
-        }
-      }
-    },
     "/test3": {
       "get": {
         "tags": [
diff --git a/springdoc-openapi-javadoc/src/test/java/test/org/springdoc/api/app94/SpringDocApp94Test.java b/springdoc-openapi-javadoc/src/test/java/test/org/springdoc/api/app94/SpringDocApp94Test.java
index 22828377b..479f52990 100644
--- a/springdoc-openapi-javadoc/src/test/java/test/org/springdoc/api/app94/SpringDocApp94Test.java
+++ b/springdoc-openapi-javadoc/src/test/java/test/org/springdoc/api/app94/SpringDocApp94Test.java
@@ -36,6 +36,7 @@ import org.springdoc.core.SpringDocProviders;
 import org.springdoc.core.customizers.OpenApiBuilderCustomizer;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OperationCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 import org.springdoc.webmvc.api.OpenApiWebMvcResource;
 import test.org.springdoc.api.AbstractSpringDocTest;
@@ -125,6 +126,7 @@ public class SpringDocApp94Test extends AbstractSpringDocTest {
 		 * @param operationCustomizers the operation customizers
 		 * @param springDocConfigProperties the spring doc config properties
 		 * @param openApiCustomisers the open api customisers
+		 * @param routerOperationCustomizers the router operation customizers
 		 * @param methodFilters the method filters
 		 * @param springDocProviders the spring doc providers
 		 * @return the open api web mvc resource
@@ -133,9 +135,9 @@ public class SpringDocApp94Test extends AbstractSpringDocTest {
 		public OpenApiWebMvcResource openApiResource(ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder,
 				OperationService operationParser,Optional<List<OperationCustomizer>> operationCustomizers,
 				SpringDocConfigProperties springDocConfigProperties,
-				Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters,SpringDocProviders springDocProviders) {
+				Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<RouterOperationCustomizer>> routerOperationCustomizers, Optional<List<OpenApiMethodFilter>> methodFilters,SpringDocProviders springDocProviders) {
 			return new OpenApiWebMvcResource(DEFAULT_GROUP_NAME, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser,
-					operationCustomizers, openApiCustomisers,methodFilters, springDocConfigProperties, springDocProviders);
+					operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 		}
 
 		/**
diff --git a/springdoc-openapi-kotlin/src/test/kotlin/test/org/springdoc/api/app6/ByteArrayController.kt b/springdoc-openapi-kotlin/src/test/kotlin/test/org/springdoc/api/app6/ByteArrayController.kt
deleted file mode 100644
index 2437acda9..000000000
--- a/springdoc-openapi-kotlin/src/test/kotlin/test/org/springdoc/api/app6/ByteArrayController.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *
- *  * Copyright 2019-2022 the original author or authors.
- *  *
- *  * Licensed under the Apache License, Version 2.0 (the "License");
- *  * you may not use this file except in compliance with the License.
- *  * You may obtain a copy of the License at
- *  *
- *  *      https://www.apache.org/licenses/LICENSE-2.0
- *  *
- *  * Unless required by applicable law or agreed to in writing, software
- *  * distributed under the License is distributed on an "AS IS" BASIS,
- *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  * See the License for the specific language governing permissions and
- *  * limitations under the License.
- *
- */
-
-package test.org.springdoc.api.app6
-
-import org.springframework.web.bind.annotation.GetMapping
-import org.springframework.web.bind.annotation.RequestMapping
-import org.springframework.web.bind.annotation.RestController
-
-data class Foo(val data: ByteArray)
-
-@RestController
-@RequestMapping("/bytearray")
-class ByteArrayController {
-
-    @GetMapping("/")
-    fun getByteArray(): Foo = Foo(byteArrayOf(0))
-
-}
diff --git a/springdoc-openapi-kotlin/src/test/kotlin/test/org/springdoc/api/app6/SpringDocApp6Test.kt b/springdoc-openapi-kotlin/src/test/kotlin/test/org/springdoc/api/app6/SpringDocApp6Test.kt
deleted file mode 100644
index 2197721dc..000000000
--- a/springdoc-openapi-kotlin/src/test/kotlin/test/org/springdoc/api/app6/SpringDocApp6Test.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *
- *  * Copyright 2019-2020 the original author or authors.
- *  *
- *  * Licensed under the Apache License, Version 2.0 (the "License");
- *  * you may not use this file except in compliance with the License.
- *  * You may obtain a copy of the License at
- *  *
- *  *      https://www.apache.org/licenses/LICENSE-2.0
- *  *
- *  * Unless required by applicable law or agreed to in writing, software
- *  * distributed under the License is distributed on an "AS IS" BASIS,
- *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  * See the License for the specific language governing permissions and
- *  * limitations under the License.
- *
- */
-
-package test.org.springdoc.api.app6
-
-import org.springframework.boot.autoconfigure.SpringBootApplication
-import org.springframework.context.annotation.ComponentScan
-import test.org.springdoc.api.AbstractKotlinSpringDocTest
-
-class SpringDocApp6Test : AbstractKotlinSpringDocTest() {
-
-	@SpringBootApplication
-	@ComponentScan(basePackages = ["org.springdoc", "test.org.springdoc.api.app6"])
-	open class DemoApplication
-
-}
\ No newline at end of file
diff --git a/springdoc-openapi-kotlin/src/test/resources/results/app6.json b/springdoc-openapi-kotlin/src/test/resources/results/app6.json
deleted file mode 100644
index 907da4426..000000000
--- a/springdoc-openapi-kotlin/src/test/resources/results/app6.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "openapi": "3.0.1",
-  "info": {
-    "title": "OpenAPI definition",
-    "version": "v0"
-  },
-  "servers": [
-    {
-      "url": "",
-      "description": "Generated server url"
-    }
-  ],
-  "paths": {
-    "/bytearray/": {
-      "get": {
-        "tags": [
-          "byte-array-controller"
-        ],
-        "operationId": "getByteArray",
-        "responses": {
-          "200": {
-            "description": "OK",
-            "content": {
-              "*/*": {
-                "schema": {
-                  "$ref": "#/components/schemas/Foo"
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  },
-  "components": {
-    "schemas": {
-      "Foo": {
-        "required": [
-          "data"
-        ],
-        "type": "object",
-        "properties": {
-          "data": {
-            "type": "string",
-            "format": "byte"
-          }
-        }
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/springdoc-openapi-native/src/test/java/test/org/springdoc/api/app1/TestApplicationTests.java b/springdoc-openapi-native/src/test/java/test/org/springdoc/api/app1/TestApplicationTests.java
index 6ef6d2d29..50a5dbc96 100644
--- a/springdoc-openapi-native/src/test/java/test/org/springdoc/api/app1/TestApplicationTests.java
+++ b/springdoc-openapi-native/src/test/java/test/org/springdoc/api/app1/TestApplicationTests.java
@@ -22,6 +22,8 @@
 
 package test.org.springdoc.api.app1;
 
+import org.junit.jupiter.api.Test;
+
 import org.springframework.boot.SpringBootConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
 
@@ -31,7 +33,7 @@ class TestApplicationTests  {
 	@SpringBootConfiguration
 	static class SpringDocTestApp {}
 
-	//@Test
+	@Test
 	void contextLoads() {}
 
 }
diff --git a/springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api/app187/DuplicatedPathController.java b/springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api/app187/DuplicatedPathController.java
new file mode 100644
index 000000000..a9df9a8dd
--- /dev/null
+++ b/springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api/app187/DuplicatedPathController.java
@@ -0,0 +1,19 @@
+package test.org.springdoc.api.app187;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class DuplicatedPathController {
+
+	@GetMapping("/duplicated")
+	public String duplicated1() {
+		return "globalBeanFiltered";
+	}
+
+	@GetMapping(value = "/duplicated", params = "filter=params")
+	public String duplicated2() {
+		return "beanFiltered";
+	}
+
+}
diff --git a/springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api/app187/SpringDocApp187Test.java b/springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api/app187/SpringDocApp187Test.java
new file mode 100644
index 000000000..8d3f48628
--- /dev/null
+++ b/springdoc-openapi-webflux-core/src/test/java/test/org/springdoc/api/app187/SpringDocApp187Test.java
@@ -0,0 +1,36 @@
+package test.org.springdoc.api.app187;
+
+import org.junit.jupiter.api.Test;
+import org.springdoc.core.Constants;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
+import test.org.springdoc.api.AbstractSpringDocTest;
+
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+
+class SpringDocApp187Test extends AbstractSpringDocTest {
+
+	@SpringBootApplication
+	@ComponentScan(basePackages = { "org.springdoc", "test.org.springdoc.api.app187" })
+	static class SpringDocTestApp {
+
+		@Bean
+		public RouterOperationCustomizer addRouterOperationCustomizer() {
+			return (routerOperation, handlerMethod) -> {
+				if (routerOperation.getParams().length > 0) {
+					routerOperation.setPath(routerOperation.getPath() + "?" + String.join("&", routerOperation.getParams()));
+				}
+				return routerOperation;
+			};
+		}
+	}
+
+	@Test
+	public void testAddRouterOperationCustomizerBean() {
+		webTestClient.get().uri(Constants.DEFAULT_API_DOCS_URL).exchange()
+				.expectStatus().isOk()
+				.expectBody().json(getContent("results/app187.json"), true);
+	}
+
+}
diff --git a/springdoc-openapi-webflux-core/src/test/resources/results/app146-1.json b/springdoc-openapi-webflux-core/src/test/resources/results/app146-1.json
index 1996d2ae4..92c2f3cb2 100644
--- a/springdoc-openapi-webflux-core/src/test/resources/results/app146-1.json
+++ b/springdoc-openapi-webflux-core/src/test/resources/results/app146-1.json
@@ -26,8 +26,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'loggers-name'",
-        "operationId": "loggers-name",
+        "operationId": "handle_5",
         "parameters": [
           {
             "name": "name",
@@ -65,8 +64,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'loggers-name'",
-        "operationId": "loggers-name_2",
+        "operationId": "handle",
         "parameters": [
           {
             "name": "name",
@@ -114,8 +112,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'threaddump'",
-        "operationId": "threaddump",
+        "operationId": "handle_1_1",
         "responses": {
           "200": {
             "description": "OK",
@@ -150,8 +147,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'scheduledtasks'",
-        "operationId": "scheduledtasks",
+        "operationId": "handle_1",
         "responses": {
           "200": {
             "description": "OK",
@@ -181,8 +177,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'metrics-requiredMetricName'",
-        "operationId": "metrics-requiredMetricName",
+        "operationId": "handle_2",
         "parameters": [
           {
             "name": "requiredMetricName",
@@ -222,8 +217,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'metrics'",
-        "operationId": "metrics",
+        "operationId": "handle_3",
         "responses": {
           "200": {
             "description": "OK",
@@ -253,8 +247,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'mappings'",
-        "operationId": "mappings",
+        "operationId": "handle_4",
         "responses": {
           "200": {
             "description": "OK",
@@ -284,8 +277,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'loggers'",
-        "operationId": "loggers",
+        "operationId": "handle_6",
         "responses": {
           "200": {
             "description": "OK",
@@ -315,8 +307,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'info'",
-        "operationId": "info",
+        "operationId": "handle_7",
         "responses": {
           "200": {
             "description": "OK",
@@ -346,8 +337,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'heapdump'",
-        "operationId": "heapdump",
+        "operationId": "handle_8",
         "responses": {
           "200": {
             "description": "OK",
@@ -367,8 +357,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'health'",
-        "operationId": "health",
+        "operationId": "handle_9",
         "responses": {
           "200": {
             "description": "OK",
@@ -398,8 +387,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'env-toMatch'",
-        "operationId": "env-toMatch",
+        "operationId": "handle_10",
         "parameters": [
           {
             "name": "toMatch",
@@ -439,8 +427,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'env'",
-        "operationId": "env",
+        "operationId": "handle_11",
         "responses": {
           "200": {
             "description": "OK",
@@ -470,8 +457,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'configprops-prefix'",
-        "operationId": "configprops-prefix",
+        "operationId": "handle_12",
         "parameters": [
           {
             "name": "prefix",
@@ -511,8 +497,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'configprops'",
-        "operationId": "configprops",
+        "operationId": "handle_13",
         "responses": {
           "200": {
             "description": "OK",
@@ -542,8 +527,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'conditions'",
-        "operationId": "conditions",
+        "operationId": "handle_14",
         "responses": {
           "200": {
             "description": "OK",
@@ -573,8 +557,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches-cache'",
-        "operationId": "caches-cache",
+        "operationId": "handle_15",
         "parameters": [
           {
             "name": "cache",
@@ -612,8 +595,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches-cache'",
-        "operationId": "caches-cache_2",
+        "operationId": "handle_19",
         "parameters": [
           {
             "name": "cache",
@@ -653,8 +635,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches'",
-        "operationId": "caches",
+        "operationId": "handle_16",
         "responses": {
           "200": {
             "description": "OK",
@@ -682,8 +663,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches'",
-        "operationId": "caches_2",
+        "operationId": "handle_18",
         "responses": {
           "200": {
             "description": "OK",
@@ -703,8 +683,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'beans'",
-        "operationId": "beans",
+        "operationId": "handle_17",
         "responses": {
           "200": {
             "description": "OK",
diff --git a/springdoc-openapi-webflux-core/src/test/resources/results/app147-1.json b/springdoc-openapi-webflux-core/src/test/resources/results/app147-1.json
index b70f5d11a..b049d12c0 100644
--- a/springdoc-openapi-webflux-core/src/test/resources/results/app147-1.json
+++ b/springdoc-openapi-webflux-core/src/test/resources/results/app147-1.json
@@ -26,8 +26,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'loggers-name'",
-        "operationId": "loggers-name",
+        "operationId": "handle_5",
         "parameters": [
           {
             "name": "name",
@@ -65,8 +64,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'loggers-name'",
-        "operationId": "loggers-name_2",
+        "operationId": "handle",
         "parameters": [
           {
             "name": "name",
@@ -114,8 +112,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'threaddump'",
-        "operationId": "threaddump",
+        "operationId": "handle_1_1",
         "responses": {
           "200": {
             "description": "OK",
@@ -150,8 +147,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'scheduledtasks'",
-        "operationId": "scheduledtasks",
+        "operationId": "handle_1",
         "responses": {
           "200": {
             "description": "OK",
@@ -181,8 +177,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'metrics-requiredMetricName'",
-        "operationId": "metrics-requiredMetricName",
+        "operationId": "handle_2",
         "parameters": [
           {
             "name": "requiredMetricName",
@@ -222,8 +217,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'metrics'",
-        "operationId": "metrics",
+        "operationId": "handle_3",
         "responses": {
           "200": {
             "description": "OK",
@@ -253,8 +247,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'mappings'",
-        "operationId": "mappings",
+        "operationId": "handle_4",
         "responses": {
           "200": {
             "description": "OK",
@@ -284,8 +277,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'loggers'",
-        "operationId": "loggers",
+        "operationId": "handle_6",
         "responses": {
           "200": {
             "description": "OK",
@@ -315,8 +307,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'info'",
-        "operationId": "info",
+        "operationId": "handle_7",
         "responses": {
           "200": {
             "description": "OK",
@@ -346,8 +337,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'heapdump'",
-        "operationId": "heapdump",
+        "operationId": "handle_8",
         "responses": {
           "200": {
             "description": "OK",
@@ -367,8 +357,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'health'",
-        "operationId": "health",
+        "operationId": "handle_9",
         "responses": {
           "200": {
             "description": "OK",
@@ -398,8 +387,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'env-toMatch'",
-        "operationId": "env-toMatch",
+        "operationId": "handle_10",
         "parameters": [
           {
             "name": "toMatch",
@@ -439,8 +427,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'env'",
-        "operationId": "env",
+        "operationId": "handle_11",
         "responses": {
           "200": {
             "description": "OK",
@@ -470,8 +457,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'configprops-prefix'",
-        "operationId": "configprops-prefix",
+        "operationId": "handle_12",
         "parameters": [
           {
             "name": "prefix",
@@ -511,8 +497,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'configprops'",
-        "operationId": "configprops",
+        "operationId": "handle_13",
         "responses": {
           "200": {
             "description": "OK",
@@ -542,8 +527,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'conditions'",
-        "operationId": "conditions",
+        "operationId": "handle_14",
         "responses": {
           "200": {
             "description": "OK",
@@ -573,8 +557,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches-cache'",
-        "operationId": "caches-cache",
+        "operationId": "handle_15",
         "parameters": [
           {
             "name": "cache",
@@ -612,8 +595,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches-cache'",
-        "operationId": "caches-cache_2",
+        "operationId": "handle_19",
         "parameters": [
           {
             "name": "cache",
@@ -653,8 +635,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches'",
-        "operationId": "caches",
+        "operationId": "handle_16",
         "responses": {
           "200": {
             "description": "OK",
@@ -682,8 +663,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches'",
-        "operationId": "caches_2",
+        "operationId": "handle_18",
         "responses": {
           "200": {
             "description": "OK",
@@ -703,8 +683,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'beans'",
-        "operationId": "beans",
+        "operationId": "handle_17",
         "responses": {
           "200": {
             "description": "OK",
diff --git a/springdoc-openapi-webflux-core/src/test/resources/results/app148-2.json b/springdoc-openapi-webflux-core/src/test/resources/results/app148-2.json
index dc2fdc99c..82983a583 100644
--- a/springdoc-openapi-webflux-core/src/test/resources/results/app148-2.json
+++ b/springdoc-openapi-webflux-core/src/test/resources/results/app148-2.json
@@ -26,8 +26,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'loggers-name'",
-        "operationId": "loggers-name",
+        "operationId": "handle_5",
         "parameters": [
           {
             "name": "name",
@@ -65,8 +64,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'loggers-name'",
-        "operationId": "loggers-name_2",
+        "operationId": "handle",
         "parameters": [
           {
             "name": "name",
@@ -114,8 +112,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'threaddump'",
-        "operationId": "threaddump",
+        "operationId": "handle_1_1",
         "responses": {
           "200": {
             "description": "OK",
@@ -150,8 +147,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'scheduledtasks'",
-        "operationId": "scheduledtasks",
+        "operationId": "handle_1",
         "responses": {
           "200": {
             "description": "OK",
@@ -181,8 +177,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'metrics-requiredMetricName'",
-        "operationId": "metrics-requiredMetricName",
+        "operationId": "handle_2",
         "parameters": [
           {
             "name": "requiredMetricName",
@@ -222,8 +217,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'metrics'",
-        "operationId": "metrics",
+        "operationId": "handle_3",
         "responses": {
           "200": {
             "description": "OK",
@@ -253,8 +247,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'mappings'",
-        "operationId": "mappings",
+        "operationId": "handle_4",
         "responses": {
           "200": {
             "description": "OK",
@@ -284,8 +277,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'loggers'",
-        "operationId": "loggers",
+        "operationId": "handle_6",
         "responses": {
           "200": {
             "description": "OK",
@@ -315,8 +307,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'info'",
-        "operationId": "info",
+        "operationId": "handle_7",
         "responses": {
           "200": {
             "description": "OK",
@@ -346,8 +337,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'heapdump'",
-        "operationId": "heapdump",
+        "operationId": "handle_8",
         "responses": {
           "200": {
             "description": "OK",
@@ -367,8 +357,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'health'",
-        "operationId": "health",
+        "operationId": "handle_9",
         "responses": {
           "200": {
             "description": "OK",
@@ -398,8 +387,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'env-toMatch'",
-        "operationId": "env-toMatch",
+        "operationId": "handle_10",
         "parameters": [
           {
             "name": "toMatch",
@@ -439,8 +427,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'env'",
-        "operationId": "env",
+        "operationId": "handle_11",
         "responses": {
           "200": {
             "description": "OK",
@@ -470,8 +457,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'configprops-prefix'",
-        "operationId": "configprops-prefix",
+        "operationId": "handle_12",
         "parameters": [
           {
             "name": "prefix",
@@ -511,8 +497,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'configprops'",
-        "operationId": "configprops",
+        "operationId": "handle_13",
         "responses": {
           "200": {
             "description": "OK",
@@ -542,8 +527,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'conditions'",
-        "operationId": "conditions",
+        "operationId": "handle_14",
         "responses": {
           "200": {
             "description": "OK",
@@ -573,8 +557,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches-cache'",
-        "operationId": "caches-cache",
+        "operationId": "handle_15",
         "parameters": [
           {
             "name": "cache",
@@ -612,8 +595,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches-cache'",
-        "operationId": "caches-cache_2",
+        "operationId": "handle_19",
         "parameters": [
           {
             "name": "cache",
@@ -653,8 +635,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches'",
-        "operationId": "caches",
+        "operationId": "handle_16",
         "responses": {
           "200": {
             "description": "OK",
@@ -682,8 +663,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches'",
-        "operationId": "caches_2",
+        "operationId": "handle_18",
         "responses": {
           "200": {
             "description": "OK",
@@ -703,8 +683,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'beans'",
-        "operationId": "beans",
+        "operationId": "handle_17",
         "responses": {
           "200": {
             "description": "OK",
diff --git a/springdoc-openapi-webflux-core/src/test/resources/results/app186.json b/springdoc-openapi-webflux-core/src/test/resources/results/app186.json
index 6f5111c7a..2b4d74f14 100644
--- a/springdoc-openapi-webflux-core/src/test/resources/results/app186.json
+++ b/springdoc-openapi-webflux-core/src/test/resources/results/app186.json
@@ -26,8 +26,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'loggers-name'",
-        "operationId": "loggers-name",
+        "operationId": "handle_5",
         "parameters": [
           {
             "name": "name",
@@ -65,8 +64,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'loggers-name'",
-        "operationId": "loggers-name_2",
+        "operationId": "handle",
         "parameters": [
           {
             "name": "name",
@@ -114,8 +112,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'threaddump'",
-        "operationId": "threaddump",
+        "operationId": "handle_1_1",
         "responses": {
           "200": {
             "description": "OK",
@@ -150,8 +147,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'scheduledtasks'",
-        "operationId": "scheduledtasks",
+        "operationId": "handle_1",
         "responses": {
           "200": {
             "description": "OK",
@@ -181,8 +177,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'metrics-requiredMetricName'",
-        "operationId": "metrics-requiredMetricName",
+        "operationId": "handle_2",
         "parameters": [
           {
             "name": "requiredMetricName",
@@ -222,8 +217,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'metrics'",
-        "operationId": "metrics",
+        "operationId": "handle_3",
         "responses": {
           "200": {
             "description": "OK",
@@ -253,8 +247,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'mappings'",
-        "operationId": "mappings",
+        "operationId": "handle_4",
         "responses": {
           "200": {
             "description": "OK",
@@ -284,8 +277,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'loggers'",
-        "operationId": "loggers",
+        "operationId": "handle_6",
         "responses": {
           "200": {
             "description": "OK",
@@ -315,8 +307,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'info'",
-        "operationId": "info",
+        "operationId": "handle_7",
         "responses": {
           "200": {
             "description": "OK",
@@ -346,8 +337,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'heapdump'",
-        "operationId": "heapdump",
+        "operationId": "handle_8",
         "responses": {
           "200": {
             "description": "OK",
@@ -367,8 +357,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'health-path'",
-        "operationId": "health-path",
+        "operationId": "handle_9",
         "parameters": [
           {
             "name": "*path",
@@ -408,8 +397,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'health'",
-        "operationId": "health",
+        "operationId": "handle_10",
         "responses": {
           "200": {
             "description": "OK",
@@ -439,8 +427,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'env-toMatch'",
-        "operationId": "env-toMatch",
+        "operationId": "handle_11",
         "parameters": [
           {
             "name": "toMatch",
@@ -480,8 +467,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'env'",
-        "operationId": "env",
+        "operationId": "handle_12",
         "responses": {
           "200": {
             "description": "OK",
@@ -511,8 +497,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'configprops-prefix'",
-        "operationId": "configprops-prefix",
+        "operationId": "handle_13",
         "parameters": [
           {
             "name": "prefix",
@@ -552,8 +537,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'configprops'",
-        "operationId": "configprops",
+        "operationId": "handle_14",
         "responses": {
           "200": {
             "description": "OK",
@@ -583,8 +567,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'conditions'",
-        "operationId": "conditions",
+        "operationId": "handle_15",
         "responses": {
           "200": {
             "description": "OK",
@@ -614,8 +597,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches-cache'",
-        "operationId": "caches-cache",
+        "operationId": "handle_16",
         "parameters": [
           {
             "name": "cache",
@@ -653,8 +635,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches-cache'",
-        "operationId": "caches-cache_2",
+        "operationId": "handle_20",
         "parameters": [
           {
             "name": "cache",
@@ -694,8 +675,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches'",
-        "operationId": "caches",
+        "operationId": "handle_17",
         "responses": {
           "200": {
             "description": "OK",
@@ -723,8 +703,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'caches'",
-        "operationId": "caches_2",
+        "operationId": "handle_19",
         "responses": {
           "200": {
             "description": "OK",
@@ -744,8 +723,7 @@
         "tags": [
           "Actuator"
         ],
-        "summary": "Actuator web endpoint 'beans'",
-        "operationId": "beans",
+        "operationId": "handle_18",
         "responses": {
           "200": {
             "description": "OK",
@@ -835,4 +813,4 @@
       }
     }
   }
-}
+}
\ No newline at end of file
diff --git a/springdoc-openapi-webflux-core/src/test/resources/results/app187.json b/springdoc-openapi-webflux-core/src/test/resources/results/app187.json
new file mode 100644
index 000000000..a918f64b2
--- /dev/null
+++ b/springdoc-openapi-webflux-core/src/test/resources/results/app187.json
@@ -0,0 +1,56 @@
+{
+  "openapi": "3.0.1",
+  "info": {
+    "title": "OpenAPI definition",
+    "version": "v0"
+  },
+  "servers": [
+    {
+      "url": "",
+      "description": "Generated server url"
+    }
+  ],
+  "paths": {
+    "/duplicated": {
+      "get": {
+        "tags": [
+          "duplicated-path-controller"
+        ],
+        "operationId": "duplicated1",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "*/*": {
+                "schema": {
+                  "type": "string"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/duplicated?filter=params": {
+      "get": {
+        "tags": [
+          "duplicated-path-controller"
+        ],
+        "operationId": "duplicated2",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "*/*": {
+                "schema": {
+                  "type": "string"
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  },
+  "components": {}
+}
diff --git a/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app176/HelloController.java b/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app176/HelloController.java
index 644e8b84f..b74114c5d 100644
--- a/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app176/HelloController.java
+++ b/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app176/HelloController.java
@@ -62,10 +62,4 @@ public class HelloController {
 	@ParameterObject Pageable pageable) {
 		return "bla";
 	}
-
-	@GetMapping("/test4")
-	public String getPatientList4(@PageableDefault(100)
-	@ParameterObject Pageable pageable) {
-		return "bla";
-	}
 }
diff --git a/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app94/SpringDocApp94Test.java b/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app94/SpringDocApp94Test.java
index 35944807e..36f2743bc 100644
--- a/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app94/SpringDocApp94Test.java
+++ b/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v30/app94/SpringDocApp94Test.java
@@ -40,6 +40,7 @@ import org.springdoc.core.SpringDocProviders;
 import org.springdoc.core.customizers.OpenApiBuilderCustomizer;
 import org.springdoc.core.customizers.OpenApiCustomiser;
 import org.springdoc.core.customizers.OperationCustomizer;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
 import org.springdoc.core.filters.OpenApiMethodFilter;
 import org.springdoc.webmvc.api.OpenApiWebMvcResource;
 import test.org.springdoc.api.v30.AbstractSpringDocV30Test;
@@ -95,9 +96,9 @@ public class SpringDocApp94Test extends AbstractSpringDocV30Test {
 		@Bean(name = "openApiResource")
 		public OpenApiWebMvcResource openApiResource(ObjectFactory<OpenAPIService> openAPIBuilderObjectFactory, AbstractRequestService requestBuilder, GenericResponseService responseBuilder,
 				OperationService operationParser,Optional<List<OperationCustomizer>> operationCustomizers, SpringDocConfigProperties springDocConfigProperties,
-				Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocProviders springDocProviders) {
+				Optional<List<OpenApiCustomiser>> openApiCustomisers, Optional<List<RouterOperationCustomizer>> routerOperationCustomizers, Optional<List<OpenApiMethodFilter>> methodFilters, SpringDocProviders springDocProviders) {
 			return new OpenApiWebMvcResource(DEFAULT_GROUP_NAME, openAPIBuilderObjectFactory, requestBuilder, responseBuilder, operationParser,
-					operationCustomizers, openApiCustomisers, methodFilters, springDocConfigProperties, springDocProviders);
+					operationCustomizers, openApiCustomisers, routerOperationCustomizers, methodFilters, springDocConfigProperties, springDocProviders);
 		}
 
 		@Override
diff --git a/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v31/app5/DuplicatedPathController.java b/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v31/app5/DuplicatedPathController.java
new file mode 100644
index 000000000..c51726bf9
--- /dev/null
+++ b/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v31/app5/DuplicatedPathController.java
@@ -0,0 +1,19 @@
+package test.org.springdoc.api.v31.app5;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class DuplicatedPathController {
+
+	@GetMapping("/duplicated")
+	public String duplicated1() {
+		return "globalBeanFiltered";
+	}
+
+	@GetMapping(value = "/duplicated", params = "filter=params")
+	public String duplicated2() {
+		return "beanFiltered";
+	}
+
+}
diff --git a/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v31/app5/SpringDocApp5Test.java b/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v31/app5/SpringDocApp5Test.java
new file mode 100644
index 000000000..617429e9a
--- /dev/null
+++ b/springdoc-openapi-webmvc-core/src/test/java/test/org/springdoc/api/v31/app5/SpringDocApp5Test.java
@@ -0,0 +1,48 @@
+package test.org.springdoc.api.v31.app5;
+
+import org.junit.jupiter.api.Test;
+import org.springdoc.core.Constants;
+import org.springdoc.core.customizers.RouterOperationCustomizer;
+import test.org.springdoc.api.v31.AbstractSpringDocV31Test;
+
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.test.web.servlet.MvcResult;
+
+import static org.hamcrest.Matchers.is;
+import static org.skyscreamer.jsonassert.JSONAssert.assertEquals;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+class SpringDocApp5Test extends AbstractSpringDocV31Test {
+
+	@SpringBootApplication
+	@ComponentScan
+	static class SpringDocTestApp {
+
+		@Bean
+		public RouterOperationCustomizer addRouterOperationCustomizer() {
+			return (routerOperation, handlerMethod) -> {
+				if (routerOperation.getParams().length > 0) {
+					routerOperation.setPath(routerOperation.getPath() + "?" + String.join("&", routerOperation.getParams()));
+				}
+				return routerOperation;
+			};
+		}
+	}
+
+	@Test
+	public void testAddRouterOperationCustomizerBean() throws Exception {
+		className = getClass().getSimpleName();
+		String testNumber = className.replaceAll("[^0-9]", "");
+		MvcResult mockMvcResult =
+				mockMvc.perform(get(Constants.DEFAULT_API_DOCS_URL)).andExpect(status().isOk())
+						.andExpect(jsonPath("$.openapi", is("3.1.0"))).andReturn();
+		String result = mockMvcResult.getResponse().getContentAsString();
+		String expected = getContent("results/3.1.0/app" + testNumber + ".json");
+		assertEquals(expected, result, true);
+	}
+
+}
diff --git a/springdoc-openapi-webmvc-core/src/test/resources/results/3.0.1/app176.json b/springdoc-openapi-webmvc-core/src/test/resources/results/3.0.1/app176.json
index 802ad99f5..694c5ea03 100644
--- a/springdoc-openapi-webmvc-core/src/test/resources/results/3.0.1/app176.json
+++ b/springdoc-openapi-webmvc-core/src/test/resources/results/3.0.1/app176.json
@@ -11,62 +11,6 @@
     }
   ],
   "paths": {
-    "/test4": {
-      "get": {
-        "tags": [
-          "hello-controller"
-        ],
-        "operationId": "getPatientList4",
-        "parameters": [
-          {
-            "name": "page",
-            "in": "query",
-            "description": "Zero-based page index (0..N)",
-            "required": false,
-            "schema": {
-              "minimum": 0,
-              "type": "integer",
-              "default": 0
-            }
-          },
-          {
-            "name": "size",
-            "in": "query",
-            "description": "The size of the page to be returned",
-            "required": false,
-            "schema": {
-              "minimum": 1,
-              "type": "integer",
-              "default": 100
-            }
-          },
-          {
-            "name": "sort",
-            "in": "query",
-            "description": "Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.",
-            "required": false,
-            "schema": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              }
-            }
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "OK",
-            "content": {
-              "*/*": {
-                "schema": {
-                  "type": "string"
-                }
-              }
-            }
-          }
-        }
-      }
-    },
     "/test3": {
       "get": {
         "tags": [
diff --git a/springdoc-openapi-webmvc-core/src/test/resources/results/3.1.0/app5.json b/springdoc-openapi-webmvc-core/src/test/resources/results/3.1.0/app5.json
new file mode 100644
index 000000000..48c1095d8
--- /dev/null
+++ b/springdoc-openapi-webmvc-core/src/test/resources/results/3.1.0/app5.json
@@ -0,0 +1,52 @@
+{
+  "openapi": "3.1.0",
+  "info": {
+    "title": "OpenAPI definition",
+    "version": "v0"
+  },
+  "servers": [
+    {
+      "url": "http://localhost",
+      "description": "Generated server url"
+    }
+  ],
+  "paths": {
+    "/duplicated": {
+      "get": {
+        "tags": [
+          "duplicated-path-controller"
+        ],
+        "operationId": "duplicated1",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "*/*": {
+                "schema": {}
+              }
+            }
+          }
+        }
+      }
+    },
+    "/duplicated?filter=params": {
+      "get": {
+        "tags": [
+          "duplicated-path-controller"
+        ],
+        "operationId": "duplicated2",
+        "responses": {
+          "200": {
+            "description": "OK",
+            "content": {
+              "*/*": {
+                "schema": {}
+              }
+            }
+          }
+        }
+      }
+    }
+  },
+  "components": {}
+}