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 141104048905766d864bac006ee3852f3f849ab9..4cc037b8c64c995d7875773f0cf547e5ac65b6d7 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 2e290d0a8147b96fb3072357fe66f2e2858d5b6e..d54768ef6f86ee49b2b7c1fad4b3309448e34dad 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=\"");