diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/Netty5HeadersAdapter.java b/spring-web/src/main/java/org/springframework/http/client/reactive/Netty5HeadersAdapter.java
index 84784301b8..7bf25d2cfd 100644
--- a/spring-web/src/main/java/org/springframework/http/client/reactive/Netty5HeadersAdapter.java
+++ b/spring-web/src/main/java/org/springframework/http/client/reactive/Netty5HeadersAdapter.java
@@ -19,12 +19,11 @@ package org.springframework.http.client.reactive;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.Spliterator;
-import java.util.Spliterators;
import java.util.stream.StreamSupport;
import io.netty5.handler.codec.http.headers.HttpHeaders;
@@ -38,7 +37,7 @@ import org.springframework.util.MultiValueMap;
*
*
There is a duplicate of this class in the server package!
*
- * This class is based on {@link NettyHeadersAdapter}.
+ *
This class is based on {@link NettyHeadersAdapter}.
*
* @author Violeta Georgieva
* @since 6.0
@@ -57,7 +56,7 @@ class Netty5HeadersAdapter implements MultiValueMap {
@Nullable
public String getFirst(String key) {
CharSequence value = this.headers.get(key);
- return value != null ? value.toString() : null;
+ return (value != null ? value.toString() : null);
}
@Override
@@ -117,17 +116,19 @@ class Netty5HeadersAdapter implements MultiValueMap {
@Override
public boolean containsValue(Object value) {
- return (value instanceof String &&
- StreamSupport.stream(
- Spliterators.spliteratorUnknownSize(this.headers.iterator(), Spliterator.ORDERED), false)
+ return (value instanceof CharSequence &&
+ StreamSupport.stream(this.headers.spliterator(), false)
.anyMatch(entry -> value.equals(entry.getValue())));
}
@Override
@Nullable
public List get(Object key) {
- if (containsKey(key)) {
- return getAll(this.headers.valuesIterator((CharSequence) key));
+ Iterator iterator = this.headers.valuesIterator((CharSequence) key);
+ if (iterator.hasNext()) {
+ List result = new ArrayList<>();
+ iterator.forEachRemaining(value -> result.add(value.toString()));
+ return result;
}
return null;
}
@@ -135,7 +136,7 @@ class Netty5HeadersAdapter implements MultiValueMap {
@Nullable
@Override
public List put(String key, @Nullable List value) {
- List previousValues = getAll(this.headers.valuesIterator(key));
+ List previousValues = get(key);
this.headers.set(key, value);
return previousValues;
}
@@ -144,7 +145,7 @@ class Netty5HeadersAdapter implements MultiValueMap {
@Override
public List remove(Object key) {
if (key instanceof String headerName) {
- List previousValues = getAll(this.headers.valuesIterator(headerName));
+ List previousValues = get(headerName);
this.headers.remove(headerName);
return previousValues;
}
@@ -168,8 +169,9 @@ class Netty5HeadersAdapter implements MultiValueMap {
@Override
public Collection> values() {
- return this.headers.names().stream()
- .map(key -> getAll(this.headers.valuesIterator(key))).toList();
+ List> result = new ArrayList<>(this.headers.size());
+ forEach((key, value) -> result.add(value));
+ return result;
}
@Override
@@ -194,19 +196,6 @@ class Netty5HeadersAdapter implements MultiValueMap {
}
- @Nullable
- private static List getAll(Iterator valuesIterator) {
- if (!valuesIterator.hasNext()) {
- return null;
- }
- List result = new ArrayList<>();
- while (valuesIterator.hasNext()) {
- result.add(valuesIterator.next().toString());
- }
- return result;
- }
-
-
private class EntryIterator implements Iterator>> {
private final Iterator names = headers.names().iterator();
@@ -238,12 +227,8 @@ class Netty5HeadersAdapter implements MultiValueMap {
@Override
public List getValue() {
- List result = new ArrayList<>();
- Iterator valuesIterator = headers.valuesIterator(this.key);
- while (valuesIterator.hasNext()) {
- result.add(valuesIterator.next().toString());
- }
- return result;
+ List values = get(this.key);
+ return (values != null ? values : Collections.emptyList());
}
@Override
diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/Netty5HeadersAdapter.java b/spring-web/src/main/java/org/springframework/http/server/reactive/Netty5HeadersAdapter.java
index 1d5fc7d610..35714334a1 100644
--- a/spring-web/src/main/java/org/springframework/http/server/reactive/Netty5HeadersAdapter.java
+++ b/spring-web/src/main/java/org/springframework/http/server/reactive/Netty5HeadersAdapter.java
@@ -19,12 +19,11 @@ package org.springframework.http.server.reactive;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.Spliterator;
-import java.util.Spliterators;
import java.util.stream.StreamSupport;
import io.netty5.handler.codec.http.headers.HttpHeaders;
@@ -55,7 +54,7 @@ final class Netty5HeadersAdapter implements MultiValueMap {
@Nullable
public String getFirst(String key) {
CharSequence value = this.headers.get(key);
- return value != null ? value.toString() : null;
+ return (value != null ? value.toString() : null);
}
@Override
@@ -116,16 +115,18 @@ final class Netty5HeadersAdapter implements MultiValueMap {
@Override
public boolean containsValue(Object value) {
return (value instanceof String &&
- StreamSupport.stream(
- Spliterators.spliteratorUnknownSize(this.headers.iterator(), Spliterator.ORDERED), false)
+ StreamSupport.stream(this.headers.spliterator(), false)
.anyMatch(entry -> value.equals(entry.getValue())));
}
@Override
@Nullable
public List get(Object key) {
- if (containsKey(key)) {
- return getAll(this.headers.valuesIterator((CharSequence) key));
+ Iterator iterator = this.headers.valuesIterator((CharSequence) key);
+ if (iterator.hasNext()) {
+ List result = new ArrayList<>();
+ iterator.forEachRemaining(value -> result.add(value.toString()));
+ return result;
}
return null;
}
@@ -133,7 +134,7 @@ final class Netty5HeadersAdapter implements MultiValueMap {
@Nullable
@Override
public List put(String key, @Nullable List value) {
- List previousValues = getAll(this.headers.valuesIterator(key));
+ List previousValues = get(key);
this.headers.set(key, value);
return previousValues;
}
@@ -142,7 +143,7 @@ final class Netty5HeadersAdapter implements MultiValueMap {
@Override
public List remove(Object key) {
if (key instanceof String headerName) {
- List previousValues = getAll(this.headers.valuesIterator(headerName));
+ List previousValues = get(headerName);
this.headers.remove(headerName);
return previousValues;
}
@@ -166,8 +167,9 @@ final class Netty5HeadersAdapter implements MultiValueMap {
@Override
public Collection> values() {
- return this.headers.names().stream()
- .map(key -> getAll(this.headers.valuesIterator(key))).toList();
+ List> result = new ArrayList<>(this.headers.size());
+ forEach((key, value) -> result.add(value));
+ return result;
}
@Override
@@ -192,19 +194,6 @@ final class Netty5HeadersAdapter implements MultiValueMap {
}
- @Nullable
- private static List getAll(Iterator valuesIterator) {
- if (!valuesIterator.hasNext()) {
- return null;
- }
- List result = new ArrayList<>();
- while (valuesIterator.hasNext()) {
- result.add(valuesIterator.next().toString());
- }
- return result;
- }
-
-
private class EntryIterator implements Iterator>> {
private final Iterator names = headers.names().iterator();
@@ -236,12 +225,8 @@ final class Netty5HeadersAdapter implements MultiValueMap {
@Override
public List getValue() {
- List result = new ArrayList<>();
- Iterator valuesIterator = headers.valuesIterator(this.key);
- while (valuesIterator.hasNext()) {
- result.add(valuesIterator.next().toString());
- }
- return result;
+ List values = get(this.key);
+ return (values != null ? values : Collections.emptyList());
}
@Override
diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorNetty2ServerHttpRequest.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorNetty2ServerHttpRequest.java
index 7f64333050..67b8fa02e4 100644
--- a/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorNetty2ServerHttpRequest.java
+++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorNetty2ServerHttpRequest.java
@@ -80,9 +80,9 @@ class ReactorNetty2ServerHttpRequest extends AbstractServerHttpRequest {
private static URI resolveBaseUrl(HttpServerRequest request) throws URISyntaxException {
String scheme = getScheme(request);
- CharSequence headerCS = request.requestHeaders().get(HttpHeaderNames.HOST);
- if (headerCS != null) {
- String header = headerCS.toString();
+ CharSequence charSequence = request.requestHeaders().get(HttpHeaderNames.HOST);
+ if (charSequence != null) {
+ String header = charSequence.toString();
final int portIndex;
if (header.startsWith("[")) {
portIndex = header.indexOf(':', header.indexOf(']'));
diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/ReactorNetty2WebSocketClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/ReactorNetty2WebSocketClient.java
index 0db51916d9..beaf75a392 100644
--- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/ReactorNetty2WebSocketClient.java
+++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/client/ReactorNetty2WebSocketClient.java
@@ -157,11 +157,8 @@ public class ReactorNetty2WebSocketClient implements WebSocketClient {
private HttpHeaders toHttpHeaders(WebsocketInbound inbound) {
HttpHeaders headers = new HttpHeaders();
- io.netty5.handler.codec.http.headers.HttpHeaders nettyHeaders = inbound.headers();
- nettyHeaders.forEach(entry -> {
- CharSequence name = entry.getKey();
- headers.put(name.toString(), getAll(nettyHeaders.valuesIterator(name)));
- });
+ inbound.headers().iterator().forEachRemaining(entry ->
+ headers.add(entry.getKey().toString(), entry.getValue().toString()));
return headers;
}