Update HttpHeaders.getAccept method

Some servlet containers (iPlanet) parse the Accept header and return
multiple values from request.getHeader("Accept"). The HttpHeaders
getAccept method has been updated to accommodate that hopefully
without causing any other issues.

The extra functionality is in effect only if we find only one
MediaType and there is more than one value for the 'Accept' header.

Issue: SPR-9655
master
Rossen Stoyanchev 12 years ago
parent ae2d24808c
commit 2e1a68893d
  1. 10
      spring-web/src/main/java/org/springframework/http/HttpHeaders.java
  2. 10
      spring-web/src/test/java/org/springframework/http/HttpHeadersTests.java

@ -153,7 +153,15 @@ public class HttpHeaders implements MultiValueMap<String, String>, Serializable
*/
public List<MediaType> getAccept() {
String value = getFirst(ACCEPT);
return (value != null ? MediaType.parseMediaTypes(value) : Collections.<MediaType>emptyList());
List<MediaType> result = (value != null) ? MediaType.parseMediaTypes(value) : Collections.<MediaType>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;
}
/**

@ -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<MediaType> 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");

Loading…
Cancel
Save