Merge branch '5.3.x'

This commit is contained in:
rstoyanchev 2022-07-01 09:42:18 +01:00
commit a575590c01
6 changed files with 18 additions and 30 deletions

View File

@ -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

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2020 the original author or authors.
* Copyright 2002-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.
@ -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<Map<String, Object>> getValuesToBind(ServerWebExchange exchange) {
Map<String, String> vars = exchange.getAttributeOrDefault(
HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, Collections.emptyMap());
MultiValueMap<String, String> queryParams = exchange.getRequest().getQueryParams();
Mono<MultiValueMap<String, String>> formData = exchange.getFormData();
Mono<MultiValueMap<String, Part>> multipartData = exchange.getMultipartData();
return Mono.zip(Mono.just(vars), Mono.just(queryParams), formData, multipartData)
.map(tuple -> {
Map<String, Object> result = new TreeMap<>();
tuple.getT1().forEach(result::put);
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.<Map<String, String>>getAttributeOrDefault(
HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, Collections.emptyMap())));
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2021 the original author or authors.
* Copyright 2002-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.
@ -164,7 +164,7 @@ public class JettyWebSocketClient implements WebSocketClient, Lifecycle {
private HandshakeInfo createHandshakeInfo(URI url, Session jettySession) {
HttpHeaders headers = new HttpHeaders();
jettySession.getUpgradeResponse().getHeaders().forEach(headers::put);
headers.putAll(jettySession.getUpgradeResponse().getHeaders());
String protocol = headers.getFirst("Sec-WebSocket-Protocol");
return new HandshakeInfo(url, headers, Mono.empty(), protocol);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2020 the original author or authors.
* Copyright 2002-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.
@ -170,7 +170,7 @@ public class StandardWebSocketClient implements WebSocketClient {
@Override
public void afterResponse(HandshakeResponse response) {
response.getHeaders().forEach(this.responseHeaders::put);
this.responseHeaders.putAll(response.getHeaders());
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2020 the original author or authors.
* Copyright 2002-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.
@ -243,7 +243,7 @@ public class UndertowWebSocketClient implements WebSocketClient {
@Override
public void beforeRequest(Map<String, List<String>> headers) {
this.requestHeaders.forEach(headers::put);
headers.putAll(this.requestHeaders);
if (this.delegate != null) {
this.delegate.beforeRequest(headers);
}
@ -251,7 +251,7 @@ public class UndertowWebSocketClient implements WebSocketClient {
@Override
public void afterRequest(Map<String, List<String>> headers) {
headers.forEach(this.responseHeaders::put);
this.responseHeaders.putAll(headers);
if (this.delegate != null) {
this.delegate.afterRequest(headers);
}

View File

@ -975,7 +975,8 @@ public class DispatcherServlet extends FrameworkServlet {
private void logRequest(HttpServletRequest request) {
LogFormatUtils.traceDebug(logger, traceOn -> {
String params;
if (StringUtils.startsWithIgnoreCase(request.getContentType(), "multipart/")) {
String contentType = request.getContentType();
if (StringUtils.startsWithIgnoreCase(contentType, "multipart/")) {
params = "multipart";
}
else if (isEnableLoggingRequestDetails()) {
@ -984,7 +985,9 @@ public class DispatcherServlet extends FrameworkServlet {
.collect(Collectors.joining(", "));
}
else {
params = (request.getParameterMap().isEmpty() ? "" : "masked");
// Avoid request body parsing for form data
params = (StringUtils.startsWithIgnoreCase(contentType, "application/x-www-form-urlencoded") ||
!request.getParameterMap().isEmpty() ? "masked" : "");
}
String queryString = request.getQueryString();