Respect MediaType charset in Jackson converters
Before this commit, AbstractJackson2HttpMessageConverter and subclasses did not check media type encoding in the canRead and canWrite methods. As a result, the converter reported that it can write (for instance) "application/json;charset=ISO-8859-1", but in practice wrote the default charset (UTF-8). This commit fixes that bug. See: gh-25076
This commit is contained in:
@@ -63,12 +63,16 @@ public class MappingJackson2HttpMessageConverterTests {
|
||||
public void canRead() {
|
||||
assertTrue(converter.canRead(MyBean.class, new MediaType("application", "json")));
|
||||
assertTrue(converter.canRead(Map.class, new MediaType("application", "json")));
|
||||
assertTrue(converter.canRead(MyBean.class, new MediaType("application", "json", StandardCharsets.UTF_8)));
|
||||
assertFalse(converter.canRead(MyBean.class, new MediaType("application", "json", StandardCharsets.ISO_8859_1)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canWrite() {
|
||||
assertTrue(converter.canWrite(MyBean.class, new MediaType("application", "json")));
|
||||
assertTrue(converter.canWrite(Map.class, new MediaType("application", "json")));
|
||||
assertTrue(converter.canWrite(MyBean.class, new MediaType("application", "json", StandardCharsets.UTF_8)));
|
||||
assertFalse(converter.canWrite(MyBean.class, new MediaType("application", "json", StandardCharsets.ISO_8859_1)));
|
||||
}
|
||||
|
||||
@Test // SPR-7905
|
||||
|
||||
@@ -49,6 +49,8 @@ public class MappingJackson2SmileHttpMessageConverterTests {
|
||||
assertTrue(converter.canRead(MyBean.class, new MediaType("application", "x-jackson-smile")));
|
||||
assertFalse(converter.canRead(MyBean.class, new MediaType("application", "json")));
|
||||
assertFalse(converter.canRead(MyBean.class, new MediaType("application", "xml")));
|
||||
assertTrue(converter.canRead(MyBean.class, new MediaType("application", "x-jackson-smile", StandardCharsets.UTF_8)));
|
||||
assertFalse(converter.canRead(MyBean.class, new MediaType("application", "x-jackson-smile", StandardCharsets.ISO_8859_1)));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -56,6 +58,8 @@ public class MappingJackson2SmileHttpMessageConverterTests {
|
||||
assertTrue(converter.canWrite(MyBean.class, new MediaType("application", "x-jackson-smile")));
|
||||
assertFalse(converter.canWrite(MyBean.class, new MediaType("application", "json")));
|
||||
assertFalse(converter.canWrite(MyBean.class, new MediaType("application", "xml")));
|
||||
assertTrue(converter.canWrite(MyBean.class, new MediaType("application", "x-jackson-smile", StandardCharsets.UTF_8)));
|
||||
assertFalse(converter.canWrite(MyBean.class, new MediaType("application", "x-jackson-smile", StandardCharsets.ISO_8859_1)));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -54,6 +54,8 @@ public class MappingJackson2XmlHttpMessageConverterTests {
|
||||
assertTrue(converter.canRead(MyBean.class, new MediaType("application", "xml")));
|
||||
assertTrue(converter.canRead(MyBean.class, new MediaType("text", "xml")));
|
||||
assertTrue(converter.canRead(MyBean.class, new MediaType("application", "soap+xml")));
|
||||
assertTrue(converter.canRead(MyBean.class, new MediaType("text", "xml", StandardCharsets.UTF_8)));
|
||||
assertFalse(converter.canRead(MyBean.class, new MediaType("text", "xml", StandardCharsets.ISO_8859_1)));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -61,6 +63,8 @@ public class MappingJackson2XmlHttpMessageConverterTests {
|
||||
assertTrue(converter.canWrite(MyBean.class, new MediaType("application", "xml")));
|
||||
assertTrue(converter.canWrite(MyBean.class, new MediaType("text", "xml")));
|
||||
assertTrue(converter.canWrite(MyBean.class, new MediaType("application", "soap+xml")));
|
||||
assertTrue(converter.canWrite(MyBean.class, new MediaType("text", "xml", StandardCharsets.UTF_8)));
|
||||
assertFalse(converter.canWrite(MyBean.class, new MediaType("text", "xml", StandardCharsets.ISO_8859_1)));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user