Skip to content

Commit 95bd3f7

Browse files
committed
Exclude Jackson XML from String encoding/decoding
Closes gh-36775
1 parent 6ca66af commit 95bd3f7

7 files changed

Lines changed: 16 additions & 4 deletions

File tree

spring-web/src/main/java/org/springframework/http/codec/json/JacksonJsonDecoder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,10 @@ public JacksonJsonDecoder(JsonMapper mapper, MimeType... mimeTypes) {
104104
super(mapper, mimeTypes);
105105
}
106106

107+
107108
@Override
108109
public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) {
109-
return super.canDecode(elementType, mimeType) && !CharSequence.class.isAssignableFrom(elementType.toClass());
110+
return (super.canDecode(elementType, mimeType) && String.class != elementType.toClass());
110111
}
111112

112113
@Override

spring-web/src/main/java/org/springframework/http/codec/json/JacksonJsonEncoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ private static PrettyPrinter initSsePrettyPrinter() {
123123

124124
@Override
125125
public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) {
126-
return super.canEncode(elementType, mimeType) && !String.class.isAssignableFrom(elementType.toClass());
126+
return (super.canEncode(elementType, mimeType) && String.class != elementType.toClass());
127127
}
128128

129129
@Override

spring-web/src/main/java/org/springframework/http/codec/xml/JacksonXmlDecoder.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@ public JacksonXmlDecoder(XmlMapper mapper, MimeType... mimeTypes) {
102102
}
103103

104104

105+
@Override
106+
public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) {
107+
return (super.canDecode(elementType, mimeType) && String.class != elementType.toClass());
108+
}
109+
105110
@Override
106111
public Flux<Object> decode(Publisher<DataBuffer> input, ResolvableType elementType, @Nullable MimeType mimeType,
107112
@Nullable Map<String, Object> hints) {

spring-web/src/main/java/org/springframework/http/codec/xml/JacksonXmlEncoder.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ public JacksonXmlEncoder(XmlMapper mapper, MimeType... mimeTypes) {
9797
}
9898

9999

100+
@Override
101+
public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) {
102+
return (super.canEncode(elementType, mimeType) && String.class != elementType.toClass());
103+
}
104+
100105
@Override
101106
public Flux<DataBuffer> encode(Publisher<?> inputStream, DataBufferFactory bufferFactory, ResolvableType elementType,
102107
@Nullable MimeType mimeType, @Nullable Map<String, Object> hints) {

spring-web/src/test/java/org/springframework/http/codec/json/JacksonJsonEncoderTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ protected void canEncode() {
9090

9191
// SPR-15910
9292
assertThat(this.encoder.canEncode(ResolvableType.forClass(Object.class), APPLICATION_OCTET_STREAM)).isFalse();
93+
assertThat(this.encoder.canEncode(ResolvableType.forClass(String.class), null)).isFalse();
9394

9495
assertThatThrownBy(() -> this.encoder.canEncode(ResolvableType.forClass(MappingJacksonValue.class), APPLICATION_JSON))
9596
.isInstanceOf(UnsupportedOperationException.class);

spring-web/src/test/java/org/springframework/http/codec/xml/JacksonXmlDecoderTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ protected void canDecode() {
5959
assertThat(decoder.canDecode(ResolvableType.forClass(Pojo.class), MediaType.TEXT_XML)).isTrue();
6060
assertThat(decoder.canDecode(ResolvableType.forClass(Pojo.class), new MediaType("application", "soap+xml"))).isTrue();
6161
assertThat(decoder.canDecode(ResolvableType.forClass(Pojo.class), null)).isTrue();
62-
assertThat(decoder.canDecode(ResolvableType.forClass(String.class), null)).isTrue();
62+
assertThat(decoder.canDecode(ResolvableType.forClass(String.class), null)).isFalse();
6363
assertThat(decoder.canDecode(ResolvableType.forClass(Pojo.class), MediaType.APPLICATION_JSON)).isFalse();
6464
}
6565

spring-web/src/test/java/org/springframework/http/codec/xml/JacksonXmlEncoderTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ void canEncode() {
5252
assertThat(this.encoder.canEncode(pojoType, MediaType.TEXT_XML)).isTrue();
5353
assertThat(this.encoder.canEncode(pojoType, new MediaType("application", "soap+xml"))).isTrue();
5454
assertThat(this.encoder.canEncode(pojoType, null)).isTrue();
55-
assertThat(this.encoder.canEncode(ResolvableType.forClass(String.class), null)).isTrue();
55+
assertThat(this.encoder.canEncode(ResolvableType.forClass(String.class), null)).isFalse();
5656
assertThat(this.encoder.canEncode(ResolvableType.NONE, null)).isTrue();
5757
assertThat(this.encoder.canEncode(ResolvableType.forClass(Pojo.class), MediaType.APPLICATION_JSON)).isFalse();
5858
}

0 commit comments

Comments
 (0)