diff --git a/org.springframework.web/src/main/java/org/springframework/http/HttpHeaders.java b/org.springframework.web/src/main/java/org/springframework/http/HttpHeaders.java index 59cc9b986d5..90367678f88 100644 --- a/org.springframework.web/src/main/java/org/springframework/http/HttpHeaders.java +++ b/org.springframework.web/src/main/java/org/springframework/http/HttpHeaders.java @@ -177,11 +177,15 @@ public class HttpHeaders implements MultiValueMap { String[] tokens = value.split(",\\s*"); for (String token : tokens) { int paramIdx = token.indexOf(';'); + String charsetName; if (paramIdx == -1) { - result.add(Charset.forName(token)); + charsetName = token; } else { - result.add(Charset.forName(token.substring(0, paramIdx))); + charsetName = token.substring(0, paramIdx); + } + if (!charsetName.equals("*")) { + result.add(Charset.forName(charsetName)); } } } diff --git a/org.springframework.web/src/test/java/org/springframework/http/HttpHeadersTests.java b/org.springframework.web/src/test/java/org/springframework/http/HttpHeadersTests.java index b8051bd859e..1b82eeb8d6a 100644 --- a/org.springframework.web/src/test/java/org/springframework/http/HttpHeadersTests.java +++ b/org.springframework.web/src/test/java/org/springframework/http/HttpHeadersTests.java @@ -20,6 +20,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.EnumSet; import java.util.GregorianCalendar; @@ -66,6 +67,13 @@ public class HttpHeadersTests { assertEquals("Invalid Accept header", "utf-8, iso-8859-1", headers.getFirst("Accept-Charset")); } + @Test + public void acceptCharsetWildcard() { + headers.set("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"); + assertEquals("Invalid Accept header", Arrays.asList(Charset.forName("ISO-8859-1"), Charset.forName("UTF-8")), + headers.getAcceptCharset()); + } + @Test public void allow() { EnumSet methods = EnumSet.of(HttpMethod.GET, HttpMethod.POST); @@ -222,11 +230,12 @@ public class HttpHeadersTests { @Test public void contentDisposition() { headers.setContentDispositionFormData("name", null); - assertEquals("Invalid Content-Disposition header", "form-data; name=\"name\"", headers.getFirst("Content-Disposition")); - + assertEquals("Invalid Content-Disposition header", "form-data; name=\"name\"", + headers.getFirst("Content-Disposition")); headers.setContentDispositionFormData("name", "filename"); - assertEquals("Invalid Content-Disposition header", "form-data; name=\"name\"; filename=\"filename\"", headers.getFirst("Content-Disposition")); + assertEquals("Invalid Content-Disposition header", "form-data; name=\"name\"; filename=\"filename\"", + headers.getFirst("Content-Disposition")); }