diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/JacksonJsonDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/JacksonJsonDecoder.java index 73cb908d6fe..467bc52a39b 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/JacksonJsonDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/JacksonJsonDecoder.java @@ -104,9 +104,10 @@ public class JacksonJsonDecoder extends AbstractJacksonDecoder { super(mapper, mimeTypes); } + @Override public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { - return super.canDecode(elementType, mimeType) && !CharSequence.class.isAssignableFrom(elementType.toClass()); + return (super.canDecode(elementType, mimeType) && String.class != elementType.toClass()); } @Override diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/JacksonJsonEncoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/JacksonJsonEncoder.java index e8a14d01b03..10ba18c5860 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/JacksonJsonEncoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/JacksonJsonEncoder.java @@ -123,7 +123,7 @@ public class JacksonJsonEncoder extends AbstractJacksonEncoder { @Override public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { - return super.canEncode(elementType, mimeType) && !String.class.isAssignableFrom(elementType.toClass()); + return (super.canEncode(elementType, mimeType) && String.class != elementType.toClass()); } @Override diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/JacksonXmlDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/JacksonXmlDecoder.java index d75e13f692b..6de9cc6e609 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/xml/JacksonXmlDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/xml/JacksonXmlDecoder.java @@ -102,6 +102,11 @@ public class JacksonXmlDecoder extends AbstractJacksonDecoder { } + @Override + public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { + return (super.canDecode(elementType, mimeType) && String.class != elementType.toClass()); + } + @Override public Flux decode(Publisher input, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/JacksonXmlEncoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/JacksonXmlEncoder.java index a298a7b3d0f..0835ddf574d 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/xml/JacksonXmlEncoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/xml/JacksonXmlEncoder.java @@ -97,6 +97,11 @@ public class JacksonXmlEncoder extends AbstractJacksonEncoder { } + @Override + public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { + return (super.canEncode(elementType, mimeType) && String.class != elementType.toClass()); + } + @Override public Flux encode(Publisher inputStream, DataBufferFactory bufferFactory, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { diff --git a/spring-web/src/test/java/org/springframework/http/codec/json/JacksonJsonEncoderTests.java b/spring-web/src/test/java/org/springframework/http/codec/json/JacksonJsonEncoderTests.java index bb3b06bd064..6b900fe5dbf 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/json/JacksonJsonEncoderTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/json/JacksonJsonEncoderTests.java @@ -90,6 +90,7 @@ class JacksonJsonEncoderTests extends AbstractEncoderTests { // SPR-15910 assertThat(this.encoder.canEncode(ResolvableType.forClass(Object.class), APPLICATION_OCTET_STREAM)).isFalse(); + assertThat(this.encoder.canEncode(ResolvableType.forClass(String.class), null)).isFalse(); assertThatThrownBy(() -> this.encoder.canEncode(ResolvableType.forClass(MappingJacksonValue.class), APPLICATION_JSON)) .isInstanceOf(UnsupportedOperationException.class); diff --git a/spring-web/src/test/java/org/springframework/http/codec/xml/JacksonXmlDecoderTests.java b/spring-web/src/test/java/org/springframework/http/codec/xml/JacksonXmlDecoderTests.java index b9c62214799..c4a77be7d9b 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/xml/JacksonXmlDecoderTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/xml/JacksonXmlDecoderTests.java @@ -59,7 +59,7 @@ class JacksonXmlDecoderTests extends AbstractDecoderTests { assertThat(decoder.canDecode(ResolvableType.forClass(Pojo.class), MediaType.TEXT_XML)).isTrue(); assertThat(decoder.canDecode(ResolvableType.forClass(Pojo.class), new MediaType("application", "soap+xml"))).isTrue(); assertThat(decoder.canDecode(ResolvableType.forClass(Pojo.class), null)).isTrue(); - assertThat(decoder.canDecode(ResolvableType.forClass(String.class), null)).isTrue(); + assertThat(decoder.canDecode(ResolvableType.forClass(String.class), null)).isFalse(); assertThat(decoder.canDecode(ResolvableType.forClass(Pojo.class), MediaType.APPLICATION_JSON)).isFalse(); } diff --git a/spring-web/src/test/java/org/springframework/http/codec/xml/JacksonXmlEncoderTests.java b/spring-web/src/test/java/org/springframework/http/codec/xml/JacksonXmlEncoderTests.java index d7a2d7ba8ca..8d4f552a54d 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/xml/JacksonXmlEncoderTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/xml/JacksonXmlEncoderTests.java @@ -52,7 +52,7 @@ class JacksonXmlEncoderTests extends AbstractLeakCheckingTests { assertThat(this.encoder.canEncode(pojoType, MediaType.TEXT_XML)).isTrue(); assertThat(this.encoder.canEncode(pojoType, new MediaType("application", "soap+xml"))).isTrue(); assertThat(this.encoder.canEncode(pojoType, null)).isTrue(); - assertThat(this.encoder.canEncode(ResolvableType.forClass(String.class), null)).isTrue(); + assertThat(this.encoder.canEncode(ResolvableType.forClass(String.class), null)).isFalse(); assertThat(this.encoder.canEncode(ResolvableType.NONE, null)).isTrue(); assertThat(this.encoder.canEncode(ResolvableType.forClass(Pojo.class), MediaType.APPLICATION_JSON)).isFalse(); }