Skip to content

Commit 4221a34

Browse files
committed
Treat empty Accept header as "*/*"
This commit changes the `accept` RequestPredicate so that it treats an empty `Accept` header as having the value `*/*`, as per the HTTP spec.
1 parent b732251 commit 4221a34

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

spring-webflux/src/main/java/org/springframework/web/reactive/function/server/RequestPredicates.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.net.URI;
2020
import java.util.Arrays;
21+
import java.util.Collections;
2122
import java.util.HashSet;
2223
import java.util.List;
2324
import java.util.Map;
@@ -35,7 +36,6 @@
3536
import org.springframework.http.MediaType;
3637
import org.springframework.http.server.reactive.ServerHttpRequest;
3738
import org.springframework.util.Assert;
38-
import org.springframework.util.StringUtils;
3939
import org.springframework.web.reactive.function.BodyExtractor;
4040
import org.springframework.web.server.WebSession;
4141
import org.springframework.web.util.UriUtils;
@@ -157,7 +157,12 @@ public static RequestPredicate accept(MediaType... mediaTypes) {
157157
@Override
158158
public boolean test(ServerRequest.Headers headers) {
159159
List<MediaType> acceptedMediaTypes = headers.accept();
160-
MediaType.sortBySpecificityAndQuality(acceptedMediaTypes);
160+
if (acceptedMediaTypes.isEmpty()) {
161+
acceptedMediaTypes = Collections.singletonList(MediaType.ALL);
162+
}
163+
else {
164+
MediaType.sortBySpecificityAndQuality(acceptedMediaTypes);
165+
}
161166
boolean match = acceptedMediaTypes.stream()
162167
.anyMatch(acceptedMediaType -> mediaTypeSet.stream()
163168
.anyMatch(acceptedMediaType::isCompatibleWith));

spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RequestPredicatesTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public void accept() throws Exception {
140140
MockServerRequest request = MockServerRequest.builder().header("Accept", json.toString()).build();
141141
assertTrue(predicate.test(request));
142142

143-
request = MockServerRequest.builder().build();
143+
request = MockServerRequest.builder().header("Accept", MediaType.TEXT_XML_VALUE).build();
144144
assertFalse(predicate.test(request));
145145
}
146146

0 commit comments

Comments
 (0)