Browse Source

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
pull/35933/head
Sébastien Deleuze 3 weeks ago
parent
commit
46ceedf992
  1. 7
      spring-web/src/main/java/org/springframework/http/converter/AbstractKotlinSerializationHttpMessageConverter.java
  2. 4
      spring-web/src/test/kotlin/org/springframework/http/converter/json/KotlinSerializationJsonHttpMessageConverterTests.kt

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

@ -112,11 +112,12 @@ public abstract class AbstractKotlinSerializationHttpMessageConverter<T extends @@ -112,11 +112,12 @@ public abstract class AbstractKotlinSerializationHttpMessageConverter<T extends
}
@Override
public boolean canWrite(ResolvableType type, Class<?> clazz, @Nullable MediaType mediaType) {
if (!this.typePredicate.test(type) || ResolvableType.NONE.equals(type)) {
public boolean canWrite(ResolvableType type, Class<?> valueClass, @Nullable MediaType mediaType) {
ResolvableType resolvableType = (ResolvableType.NONE.equals(type) ? ResolvableType.forClass(valueClass) : type);
if (!this.typePredicate.test(resolvableType)) {
return false;
}
return serializer(type, null) != null && canWrite(mediaType);
return serializer(resolvableType, null) != null && canWrite(mediaType);
}
@Override

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

@ -128,7 +128,7 @@ class KotlinSerializationJsonHttpMessageConverterTests { @@ -128,7 +128,7 @@ class KotlinSerializationJsonHttpMessageConverterTests {
assertThat(converter.canWrite(resolvableTypeOf<Ordered>(), Ordered::class.java, MediaType.APPLICATION_JSON)).isFalse()
assertThat(converter.canWrite(resolvableTypeOf<OrderedImpl>(), OrderedImpl::class.java, MediaType.APPLICATION_JSON)).isFalse()
assertThat(converter.canWrite(ResolvableType.NONE, SerializableBean::class.java, MediaType.APPLICATION_JSON)).isFalse()
assertThat(converter.canWrite(ResolvableType.NONE, SerializableBean::class.java, MediaType.APPLICATION_JSON)).isTrue()
assertThat(converter.canWrite(ResolvableType.forType(BigDecimal::class.java), BigDecimal::class.java, MediaType.APPLICATION_JSON)).isFalse()
}
@ -156,7 +156,7 @@ class KotlinSerializationJsonHttpMessageConverterTests { @@ -156,7 +156,7 @@ class KotlinSerializationJsonHttpMessageConverterTests {
assertThat(converterWithAllTypes.canWrite(resolvableTypeOf<Ordered>(), Ordered::class.java, MediaType.APPLICATION_JSON)).isTrue()
assertThat(converterWithAllTypes.canWrite(resolvableTypeOf<OrderedImpl>(), OrderedImpl::class.java, MediaType.APPLICATION_JSON)).isFalse()
assertThat(converterWithAllTypes.canWrite(ResolvableType.NONE, SerializableBean::class.java, MediaType.APPLICATION_JSON)).isFalse()
assertThat(converterWithAllTypes.canWrite(ResolvableType.NONE, SerializableBean::class.java, MediaType.APPLICATION_JSON)).isTrue()
assertThat(converterWithAllTypes.canWrite(ResolvableType.forType(BigDecimal::class.java), BigDecimal::class.java, MediaType.APPLICATION_JSON)).isFalse()
}

Loading…
Cancel
Save