From 8f23155bf366daba22e3dcb2ac466e27a581659d Mon Sep 17 00:00:00 2001 From: Stefan Berger Date: Wed, 4 Jan 2023 15:00:53 +0100 Subject: [PATCH 1/2] Add queryParams method to ProxyExchange Fixes #2129 --- .../cloud/gateway/mvc/ProxyExchange.java | 22 +++++++++++++++++-- .../cloud/gateway/webflux/ProxyExchange.java | 19 ++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java index e1bb63f86a..99af3f45f7 100644 --- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java +++ b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java @@ -55,6 +55,7 @@ import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.HttpMessageNotWritableException; import org.springframework.util.ClassUtils; +import org.springframework.util.MultiValueMap; import org.springframework.util.StringUtils; import org.springframework.validation.BindingResult; import org.springframework.web.HttpMediaTypeNotAcceptableException; @@ -133,6 +134,7 @@ *

* * @author Dave Syer + * @author Stefan Berger * */ public class ProxyExchange { @@ -251,11 +253,23 @@ public ProxyExchange uri(String uri) { } } + /** + * Returns the request path without any query parameters. + * @return the URI path + * @see ProxyExchange#path(String) + * @see ProxyExchange#queryParams + */ public String path() { - return (String) this.webRequest.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, - WebRequest.SCOPE_REQUEST); + return exchange.getRequest().getPath().pathWithinApplication().value(); } + /** + * Returns the request path without the provided path prefix and without any query parameters. + * @param prefix the path prefix to remove + * @return the URI path + * @see ProxyExchange#path(String) + * @see ProxyExchange#queryParams + */ public String path(String prefix) { String path = path(); if (!path.startsWith(prefix)) { @@ -264,6 +278,10 @@ public String path(String prefix) { return path.substring(prefix.length()); } + public MultiValueMap queryParams() { + return exchange.getRequest().getQueryParams(); + } + public void forward(String path) { HttpServletRequest request = this.webRequest.getNativeRequest(HttpServletRequest.class); HttpServletResponse response = this.webRequest.getNativeResponse(HttpServletResponse.class); diff --git a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java index 62cb7f0721..e522247a71 100644 --- a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java +++ b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java @@ -38,6 +38,7 @@ import org.springframework.http.RequestEntity.BodyBuilder; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.util.MultiValueMap; import org.springframework.util.StringUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestBody; @@ -107,6 +108,7 @@ *

* * @author Dave Syer + * @author Stefan Berger * */ public class ProxyExchange { @@ -229,10 +231,23 @@ public ProxyExchange uri(String uri) { return this; } + /** + * Returns the request path without any query parameters. + * @return the URI path + * @see ProxyExchange#path(String) + * @see ProxyExchange#queryParams + */ public String path() { return exchange.getRequest().getPath().pathWithinApplication().value(); } + /** + * Returns the request path without the provided path prefix and without any query parameters. + * @param prefix the path prefix to remove + * @return the URI path + * @see ProxyExchange#path(String) + * @see ProxyExchange#queryParams + */ public String path(String prefix) { String path = path(); if (!path.startsWith(prefix)) { @@ -241,6 +256,10 @@ public String path(String prefix) { return path.substring(prefix.length()); } + public MultiValueMap queryParams() { + return exchange.getRequest().getQueryParams(); + } + public Mono> get() { RequestEntity requestEntity = headers((BodyBuilder) RequestEntity.get(uri)).build(); return exchange(requestEntity); From f31ca723c43deea5a472fc10683996fdeca0ff26 Mon Sep 17 00:00:00 2001 From: Stefan Berger Date: Wed, 4 Jan 2023 15:02:57 +0100 Subject: [PATCH 2/2] Add Javadoc for queryParams() --- .../org/springframework/cloud/gateway/mvc/ProxyExchange.java | 4 ++++ .../springframework/cloud/gateway/webflux/ProxyExchange.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java index 99af3f45f7..b52e970988 100644 --- a/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java +++ b/spring-cloud-gateway-mvc/src/main/java/org/springframework/cloud/gateway/mvc/ProxyExchange.java @@ -278,6 +278,10 @@ public String path(String prefix) { return path.substring(prefix.length()); } + /** + * Returns the original query parameters. + * @return the query parameters + */ public MultiValueMap queryParams() { return exchange.getRequest().getQueryParams(); } diff --git a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java index e522247a71..113abbc5b0 100644 --- a/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java +++ b/spring-cloud-gateway-webflux/src/main/java/org/springframework/cloud/gateway/webflux/ProxyExchange.java @@ -256,6 +256,10 @@ public String path(String prefix) { return path.substring(prefix.length()); } + /** + * Returns the original query parameters. + * @return the query parameters + */ public MultiValueMap queryParams() { return exchange.getRequest().getQueryParams(); }