diff --git a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java index 052c1f3408..3da6afe333 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java +++ b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java @@ -153,7 +153,15 @@ public class HttpHeaders implements MultiValueMap, Serializable */ public List getAccept() { String value = getFirst(ACCEPT); - return (value != null ? MediaType.parseMediaTypes(value) : Collections.emptyList()); + List result = (value != null) ? MediaType.parseMediaTypes(value) : Collections.emptyList(); + + // Some containers parse 'Accept' into multiple values + if ((result.size() == 1) && (headers.get(ACCEPT).size() > 1)) { + value = StringUtils.collectionToCommaDelimitedString(headers.get(ACCEPT)); + result = MediaType.parseMediaTypes(value); + } + + return result; } /** diff --git a/spring-web/src/test/java/org/springframework/http/HttpHeadersTests.java b/spring-web/src/test/java/org/springframework/http/HttpHeadersTests.java index 1b82eeb8d6..2b6ef1035f 100644 --- a/spring-web/src/test/java/org/springframework/http/HttpHeadersTests.java +++ b/spring-web/src/test/java/org/springframework/http/HttpHeadersTests.java @@ -55,6 +55,16 @@ public class HttpHeadersTests { assertEquals("Invalid Accept header", "text/html, text/plain", headers.getFirst("Accept")); } + // SPR-9655 + + @Test + public void acceptiPlanet() { + headers.add("Accept", "text/html"); + headers.add("Accept", "text/plain"); + List expected = Arrays.asList(new MediaType("text", "html"), new MediaType("text", "plain")); + assertEquals("Invalid Accept header", expected, headers.getAccept()); + } + @Test public void acceptCharsets() { Charset charset1 = Charset.forName("UTF-8");