Avoid http - web.utils package cycle

Closes gh-35952
This commit is contained in:
rstoyanchev
2025-12-02 19:05:16 +00:00
parent 1fd1d8d629
commit 5b4728f0bf
2 changed files with 21 additions and 13 deletions
@@ -50,7 +50,6 @@ import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.LinkedCaseInsensitiveMap;
import org.springframework.util.StringUtils;
import org.springframework.web.util.UriComponentsBuilder;
/**
* {@link ServerHttpRequest} implementation that is based on a {@link HttpServletRequest}.
@@ -133,15 +132,15 @@ public class ServletServerHttpRequest implements ServerHttpRequest {
}
catch (URISyntaxException ex) {
if (hasQuery) {
String requestURL = servletRequest.getRequestURL().toString();
try {
// Maybe malformed query, try to parse and encode it
query = UriComponentsBuilder.fromUriString("?" + query).build().toUri().getRawQuery();
return new URI(servletRequest.getRequestURL().toString() + "?" + query);
// Maybe malformed query, try to encode it
return new URI(requestURL + "?" + encodeQuery(query));
}
catch (URISyntaxException ex2) {
try {
// Try leaving it out
return new URI(servletRequest.getRequestURL().toString());
return new URI(requestURL);
}
catch (URISyntaxException ex3) {
// ignore
@@ -153,6 +152,11 @@ public class ServletServerHttpRequest implements ServerHttpRequest {
}
}
private static String encodeQuery(String query) throws URISyntaxException {
// Avoid package cycle with web.utils
return new URI(null, null, "", query, null).getRawQuery();
}
@Override
public HttpHeaders getHeaders() {
if (this.headers == null) {
@@ -51,7 +51,6 @@ import org.springframework.util.LinkedCaseInsensitiveMap;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
import org.springframework.web.util.UriComponentsBuilder;
/**
* Adapt {@link ServerHttpRequest} to the Servlet {@link HttpServletRequest}.
@@ -140,15 +139,15 @@ class ServletServerHttpRequest extends AbstractServerHttpRequest {
}
catch (URISyntaxException ex) {
if (hasQuery) {
String requestURL = servletRequest.getRequestURL().toString();
try {
// Maybe malformed query, try to parse and encode it
query = UriComponentsBuilder.fromUriString("?" + query).build().toUri().getRawQuery();
return new URI(servletRequest.getRequestURL().toString() + "?" + query);
// Maybe malformed query, try to encode it
return new URI(requestURL + "?" + encodeQuery(query));
}
catch (URISyntaxException ex2) {
try {
// Try leaving it out
return new URI(servletRequest.getRequestURL().toString());
return new URI(requestURL);
}
catch (URISyntaxException ex3) {
// ignore
@@ -160,9 +159,14 @@ class ServletServerHttpRequest extends AbstractServerHttpRequest {
}
}
@SuppressWarnings("NullAway")
private static MultiValueMap<String, String> initHeaders(
MultiValueMap<String, String> headerValues, HttpServletRequest request) {
private static String encodeQuery(String query) throws URISyntaxException {
// Avoid package cycle with web.utils
return new URI(null, null, "", query, null).getRawQuery();
}
@SuppressWarnings("NullAway") // Dataflow analysis limitation
private static MultiValueMap<String, String> initHeaders(
MultiValueMap<String, String> headerValues, HttpServletRequest request) {
HttpHeaders headers = null;
MediaType contentType = null;