Browse Source

HTTP header adapters print header values

Issue: SPR-17546
pull/2050/head
Rossen Stoyanchev 7 years ago
parent
commit
8eef97da33
  1. 21
      spring-web/src/main/java/org/springframework/http/HttpHeaders.java
  2. 7
      spring-web/src/main/java/org/springframework/http/server/reactive/JettyHeadersAdapter.java
  3. 6
      spring-web/src/main/java/org/springframework/http/server/reactive/NettyHeadersAdapter.java
  4. 7
      spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHeadersAdapter.java
  5. 6
      spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHeadersAdapter.java
  6. 2
      spring-webflux/src/test/resources/log4j2-test.xml

21
spring-web/src/main/java/org/springframework/http/HttpHeaders.java

@ -1640,7 +1640,26 @@ public class HttpHeaders implements MultiValueMap<String, String>, Serializable
@Override @Override
public String toString() { public String toString() {
return this.headers.toString(); return formatHeaders(this.headers);
}
/**
* Helps to format HTTP header values, as HTTP header values themselves can
* contain comma-separated values, can become confusing with regular
* {@link Map} formatting that also uses commas between entries.
* @param headers the headers to format
* @return the headers to a String
* @since 5.1.4
*/
public static String formatHeaders(MultiValueMap<String, String> headers) {
return headers.entrySet().stream()
.map(entry -> {
List<String> values = entry.getValue();
return entry.getKey() + ":" + (values.size() == 1 ?
"\"" + values.get(0) + "\"" :
values.stream().map(s -> "\"" + s + "\"").collect(Collectors.joining(", ")));
})
.collect(Collectors.joining(", ", "[", "]"));
} }

7
spring-web/src/main/java/org/springframework/http/server/reactive/JettyHeadersAdapter.java

@ -29,6 +29,7 @@ import java.util.stream.Collectors;
import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpField;
import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpFields;
import org.springframework.http.HttpHeaders;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
@ -176,6 +177,12 @@ class JettyHeadersAdapter implements MultiValueMap<String, String> {
} }
@Override
public String toString() {
return HttpHeaders.formatHeaders(this);
}
private class EntryIterator implements Iterator<Entry<String, List<String>>> { private class EntryIterator implements Iterator<Entry<String, List<String>>> {
private Enumeration<String> names = headers.getFieldNames(); private Enumeration<String> names = headers.getFieldNames();

6
spring-web/src/main/java/org/springframework/http/server/reactive/NettyHeadersAdapter.java

@ -176,6 +176,12 @@ class NettyHeadersAdapter implements MultiValueMap<String, String> {
} }
@Override
public String toString() {
return org.springframework.http.HttpHeaders.formatHeaders(this);
}
private class EntryIterator implements Iterator<Entry<String, List<String>>> { private class EntryIterator implements Iterator<Entry<String, List<String>>> {
private Iterator<String> names = headers.names().iterator(); private Iterator<String> names = headers.names().iterator();

7
spring-web/src/main/java/org/springframework/http/server/reactive/TomcatHeadersAdapter.java

@ -31,6 +31,7 @@ import java.util.stream.Collectors;
import org.apache.tomcat.util.buf.MessageBytes; import org.apache.tomcat.util.buf.MessageBytes;
import org.apache.tomcat.util.http.MimeHeaders; import org.apache.tomcat.util.http.MimeHeaders;
import org.springframework.http.HttpHeaders;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import org.springframework.util.MultiValueMap; import org.springframework.util.MultiValueMap;
@ -195,6 +196,12 @@ class TomcatHeadersAdapter implements MultiValueMap<String, String> {
} }
@Override
public String toString() {
return HttpHeaders.formatHeaders(this);
}
private class EntryIterator implements Iterator<Entry<String, List<String>>> { private class EntryIterator implements Iterator<Entry<String, List<String>>> {
private Enumeration<String> names = headers.names(); private Enumeration<String> names = headers.names();

6
spring-web/src/main/java/org/springframework/http/server/reactive/UndertowHeadersAdapter.java

@ -177,6 +177,12 @@ class UndertowHeadersAdapter implements MultiValueMap<String, String> {
} }
@Override
public String toString() {
return org.springframework.http.HttpHeaders.formatHeaders(this);
}
private class EntryIterator implements Iterator<Entry<String, List<String>>> { private class EntryIterator implements Iterator<Entry<String, List<String>>> {
private Iterator<HttpString> names = headers.getHeaderNames().iterator(); private Iterator<HttpString> names = headers.getHeaderNames().iterator();

2
spring-webflux/src/test/resources/log4j2-test.xml

@ -2,7 +2,7 @@
<Configuration status="WARN"> <Configuration status="WARN">
<Appenders> <Appenders>
<Console name="Console" target="SYSTEM_OUT"> <Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{1.} - %msg%n" />
</Console> </Console>
</Appenders> </Appenders>
<Loggers> <Loggers>

Loading…
Cancel
Save