diff --git a/spring-cloud-gateway-server-webmvc/src/main/java/org/springframework/cloud/gateway/server/mvc/common/AbstractGatewayDiscoverer.java b/spring-cloud-gateway-server-webmvc/src/main/java/org/springframework/cloud/gateway/server/mvc/common/AbstractGatewayDiscoverer.java index 0a630bb933..014f3f7003 100644 --- a/spring-cloud-gateway-server-webmvc/src/main/java/org/springframework/cloud/gateway/server/mvc/common/AbstractGatewayDiscoverer.java +++ b/spring-cloud-gateway-server-webmvc/src/main/java/org/springframework/cloud/gateway/server/mvc/common/AbstractGatewayDiscoverer.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.function.BiPredicate; import java.util.function.Supplier; import org.apache.commons.logging.Log; @@ -39,6 +40,11 @@ public abstract class AbstractGatewayDiscoverer { protected volatile MultiValueMap operations = new LinkedMultiValueMap<>(); public >, R> void doDiscover(Class supplierClass, Class returnType) { + doDiscover(supplierClass, returnType, (type, method) -> type.isAssignableFrom(method.getReturnType())); + } + + public >, R> void doDiscover(Class supplierClass, Class returnType, + BiPredicate, Method> methodPredicate) { List suppliers = loadSuppliers(supplierClass); List methods = new ArrayList<>(); @@ -59,8 +65,7 @@ else if (log.isTraceEnabled()) { } for (Method method : methods) { - // TODO: replace with a BiPredicate of some kind - if (returnType.isAssignableFrom(method.getReturnType())) { + if (methodPredicate.test(returnType, method)) { addOperationMethod(method); } }