diff --git a/spring-web/src/main/java/org/springframework/web/bind/support/WebExchangeDataBinder.java b/spring-web/src/main/java/org/springframework/web/bind/support/WebExchangeDataBinder.java index b4957970a5..9ac40eb9e2 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/support/WebExchangeDataBinder.java +++ b/spring-web/src/main/java/org/springframework/web/bind/support/WebExchangeDataBinder.java @@ -84,8 +84,8 @@ public class WebExchangeDataBinder extends WebDataBinder { } /** - * Protected method to obtain the values for data binding. By default this - * method delegates to {@link #extractValuesToBind(ServerWebExchange)}. + * Obtain the values for data binding. By default, this delegates to + * {@link #extractValuesToBind(ServerWebExchange)}. * @param exchange the current exchange * @return a map of bind values * @since 5.3 diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/BindingContext.java b/spring-webflux/src/main/java/org/springframework/web/reactive/BindingContext.java index 12b21d61a1..0756cc8b58 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/BindingContext.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/BindingContext.java @@ -18,14 +18,11 @@ package org.springframework.web.reactive; import java.util.Collections; import java.util.Map; -import java.util.TreeMap; import reactor.core.publisher.Mono; -import org.springframework.http.codec.multipart.Part; import org.springframework.lang.Nullable; import org.springframework.ui.Model; -import org.springframework.util.MultiValueMap; import org.springframework.validation.support.BindingAwareConcurrentModel; import org.springframework.web.bind.support.WebBindingInitializer; import org.springframework.web.bind.support.WebExchangeDataBinder; @@ -127,21 +124,9 @@ public class BindingContext { @Override public Mono> getValuesToBind(ServerWebExchange exchange) { - Map vars = exchange.getAttributeOrDefault( - HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, Collections.emptyMap()); - MultiValueMap queryParams = exchange.getRequest().getQueryParams(); - Mono> formData = exchange.getFormData(); - Mono> multipartData = exchange.getMultipartData(); - - return Mono.zip(Mono.just(vars), Mono.just(queryParams), formData, multipartData) - .map(tuple -> { - Map result = new TreeMap<>(); - result.putAll(tuple.getT1()); - tuple.getT2().forEach((key, values) -> addBindValue(result, key, values)); - tuple.getT3().forEach((key, values) -> addBindValue(result, key, values)); - tuple.getT4().forEach((key, values) -> addBindValue(result, key, values)); - return result; - }); + return super.getValuesToBind(exchange).doOnNext(map -> + map.putAll(exchange.>getAttributeOrDefault( + HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, Collections.emptyMap()))); } }