diff --git a/spring-web/src/main/java/org/springframework/http/MediaType.java b/spring-web/src/main/java/org/springframework/http/MediaType.java index 1411040489..4cc037b8c6 100644 --- a/spring-web/src/main/java/org/springframework/http/MediaType.java +++ b/spring-web/src/main/java/org/springframework/http/MediaType.java @@ -376,7 +376,12 @@ public class MediaType implements Comparable { } private boolean isQuotedString(String s) { - return s.length() > 1 && s.startsWith("\"") && s.endsWith("\"") ; + if (s.length() < 2) { + return false; + } + else { + return ((s.startsWith("\"") && s.endsWith("\"")) || (s.startsWith("'") && s.endsWith("'"))); + } } private String unquote(String s) { diff --git a/spring-web/src/test/java/org/springframework/http/MediaTypeTests.java b/spring-web/src/test/java/org/springframework/http/MediaTypeTests.java index 2e290d0a81..d54768ef6f 100644 --- a/spring-web/src/test/java/org/springframework/http/MediaTypeTests.java +++ b/spring-web/src/test/java/org/springframework/http/MediaTypeTests.java @@ -181,6 +181,14 @@ public class MediaTypeTests { assertEquals("\"v>alue\"", mediaType.getParameter("attr")); } + // SPR-8917 + + @Test + public void parseMediaTypeSingleQuotedParameterValue() { + MediaType mediaType = MediaType.parseMediaType("audio/*;attr='v>alue'"); + assertEquals("'v>alue'", mediaType.getParameter("attr")); + } + @Test(expected = IllegalArgumentException.class) public void parseMediaTypeIllegalQuotedParameterValue() { MediaType.parseMediaType("audio/*;attr=\"");