Skip to content

Commit 46ceedf

Browse files
committed
Refine AbstractKotlinSerializationHttpMessageConverter#canWrite
AbstractKotlinSerializationHttpMessageConverter#writeInternal is able to resolve the ResolvableType from the Object parameter when the provided one via the ResolvableType parameter is not resolvable, but AbstractKotlinSerializationHttpMessageConverter#canWrite lacks of such capability. This commit refines AbstractKotlinSerializationHttpMessageConverter#canWrite to resolve the ResolvableType from the Class<?> parameter when the provided one via the ResolvableType parameter is not resolvable. Closes gh-35920
1 parent a4b3111 commit 46ceedf

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

spring-web/src/main/java/org/springframework/http/converter/AbstractKotlinSerializationHttpMessageConverter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,12 @@ public boolean canRead(ResolvableType type, @Nullable MediaType mediaType) {
112112
}
113113

114114
@Override
115-
public boolean canWrite(ResolvableType type, Class<?> clazz, @Nullable MediaType mediaType) {
116-
if (!this.typePredicate.test(type) || ResolvableType.NONE.equals(type)) {
115+
public boolean canWrite(ResolvableType type, Class<?> valueClass, @Nullable MediaType mediaType) {
116+
ResolvableType resolvableType = (ResolvableType.NONE.equals(type) ? ResolvableType.forClass(valueClass) : type);
117+
if (!this.typePredicate.test(resolvableType)) {
117118
return false;
118119
}
119-
return serializer(type, null) != null && canWrite(mediaType);
120+
return serializer(resolvableType, null) != null && canWrite(mediaType);
120121
}
121122

122123
@Override

spring-web/src/test/kotlin/org/springframework/http/converter/json/KotlinSerializationJsonHttpMessageConverterTests.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class KotlinSerializationJsonHttpMessageConverterTests {
128128
assertThat(converter.canWrite(resolvableTypeOf<Ordered>(), Ordered::class.java, MediaType.APPLICATION_JSON)).isFalse()
129129
assertThat(converter.canWrite(resolvableTypeOf<OrderedImpl>(), OrderedImpl::class.java, MediaType.APPLICATION_JSON)).isFalse()
130130

131-
assertThat(converter.canWrite(ResolvableType.NONE, SerializableBean::class.java, MediaType.APPLICATION_JSON)).isFalse()
131+
assertThat(converter.canWrite(ResolvableType.NONE, SerializableBean::class.java, MediaType.APPLICATION_JSON)).isTrue()
132132

133133
assertThat(converter.canWrite(ResolvableType.forType(BigDecimal::class.java), BigDecimal::class.java, MediaType.APPLICATION_JSON)).isFalse()
134134
}
@@ -156,7 +156,7 @@ class KotlinSerializationJsonHttpMessageConverterTests {
156156
assertThat(converterWithAllTypes.canWrite(resolvableTypeOf<Ordered>(), Ordered::class.java, MediaType.APPLICATION_JSON)).isTrue()
157157
assertThat(converterWithAllTypes.canWrite(resolvableTypeOf<OrderedImpl>(), OrderedImpl::class.java, MediaType.APPLICATION_JSON)).isFalse()
158158

159-
assertThat(converterWithAllTypes.canWrite(ResolvableType.NONE, SerializableBean::class.java, MediaType.APPLICATION_JSON)).isFalse()
159+
assertThat(converterWithAllTypes.canWrite(ResolvableType.NONE, SerializableBean::class.java, MediaType.APPLICATION_JSON)).isTrue()
160160

161161
assertThat(converterWithAllTypes.canWrite(ResolvableType.forType(BigDecimal::class.java), BigDecimal::class.java, MediaType.APPLICATION_JSON)).isFalse()
162162
}

0 commit comments

Comments
 (0)