Skip to content

Commit 4ee0a8e

Browse files
committed
Refine Kotlin Serialization codec type checks
ServerSentEvent and String checks, removed from KotlinSerializationSupport in Spring Framework 7.0, are reintroduced by this commit at the right level (KotlinSerializationSupport for ServerSentEvent and KotlinSerializationString(Decoder|Encoder) for String). Closes gh-35885
1 parent f390883 commit 4ee0a8e

File tree

5 files changed

+5
-5
lines changed

5 files changed

+5
-5
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public int getMaxInMemorySize() {
102102

103103
@Override
104104
public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) {
105-
return canSerialize(elementType, mimeType);
105+
return canSerialize(elementType, mimeType) && !CharSequence.class.isAssignableFrom(elementType.toClass());
106106
}
107107

108108
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public void setStreamingMediaTypes(Collection<MediaType> streamingMediaTypes) {
101101

102102
@Override
103103
public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) {
104-
return canSerialize(elementType, mimeType);
104+
return canSerialize(elementType, mimeType) && !String.class.isAssignableFrom(elementType.toClass());
105105
}
106106

107107
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ protected final boolean canSerialize(ResolvableType type, @Nullable MimeType mim
117117
if (!this.typePredicate.test(type) || ResolvableType.NONE.equals(type)) {
118118
return false;
119119
}
120-
return serializer(type) != null && supports(mimeType);
120+
return serializer(type) != null && supports(mimeType) && !ServerSentEvent.class.isAssignableFrom(type.toClass());
121121
}
122122

123123
private boolean supports(@Nullable MimeType mimeType) {

spring-web/src/test/kotlin/org/springframework/http/codec/json/KotlinSerializationJsonDecoderTests.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class KotlinSerializationJsonDecoderTests : AbstractDecoderTests<KotlinSerializa
8080
assertThat(decoderForAllTypes.canDecode(ResolvableType.forClass(Pojo::class.java), MediaType.APPLICATION_JSON)).isTrue()
8181
assertThat(decoderForAllTypes.canDecode(ResolvableType.forClass(Pojo::class.java), jsonSubtype)).isTrue()
8282
assertThat(decoderForAllTypes.canDecode(ResolvableType.forClass(Pojo::class.java), null)).isTrue()
83-
assertThat(decoderForAllTypes.canDecode(ResolvableType.forClass(String::class.java), null)).isTrue()
83+
assertThat(decoderForAllTypes.canDecode(ResolvableType.forClass(String::class.java), null)).isFalse()
8484
assertThat(decoderForAllTypes.canDecode(ResolvableType.forClass(Pojo::class.java), MediaType.APPLICATION_XML)).isFalse()
8585
assertThat(decoderForAllTypes.canDecode(ResolvableType.forClass(Pojo::class.java),
8686
MediaType("application", "json", StandardCharsets.UTF_8))).isTrue()

spring-web/src/test/kotlin/org/springframework/http/codec/json/KotlinSerializationJsonEncoderTests.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ class KotlinSerializationJsonEncoderTests : AbstractEncoderTests<KotlinSerializa
9191

9292
assertThat(encoderForAllTypes.canEncode(pojoType, MediaType.APPLICATION_NDJSON)).isTrue()
9393

94-
assertThat(encoderForAllTypes.canEncode(ResolvableType.forClass(String::class.java), null)).isTrue()
94+
assertThat(encoderForAllTypes.canEncode(ResolvableType.forClass(String::class.java), null)).isFalse()
9595
assertThat(encoderForAllTypes.canEncode(ResolvableType.forClass(Pojo::class.java), MediaType.APPLICATION_XML)).isFalse()
9696
val sseType = ResolvableType.forClass(ServerSentEvent::class.java)
9797
assertThat(encoderForAllTypes.canEncode(sseType, MediaType.APPLICATION_JSON)).isFalse()

0 commit comments

Comments
 (0)