Refine Kotlin serialization converters/codecs conditions

This commit is a follow-up of 34410 to refine the activation conditions
of Kotlin serialization converters/codecs.

Closes gh-34438
This commit is contained in:
Sébastien Deleuze
2025-02-17 18:39:32 +01:00
parent eae09637a1
commit b8d9dee7be
7 changed files with 22 additions and 25 deletions

View File

@@ -411,10 +411,6 @@ class BaseDefaultCodecs implements CodecConfigurer.DefaultCodecs, CodecConfigure
addCodec(this.typedReaders, new DecoderHttpMessageReader<>(this.protobufDecoder != null ? addCodec(this.typedReaders, new DecoderHttpMessageReader<>(this.protobufDecoder != null ?
(ProtobufDecoder) this.protobufDecoder : new ProtobufDecoder())); (ProtobufDecoder) this.protobufDecoder : new ProtobufDecoder()));
} }
else if (kotlinSerializationProtobufPresent) {
addCodec(this.typedReaders, new DecoderHttpMessageReader<>(this.kotlinSerializationProtobufDecoder != null ?
(KotlinSerializationProtobufDecoder) this.kotlinSerializationProtobufDecoder : new KotlinSerializationProtobufDecoder()));
}
addCodec(this.typedReaders, new FormHttpMessageReader()); addCodec(this.typedReaders, new FormHttpMessageReader());
if (this.multipartReader != null) { if (this.multipartReader != null) {
addCodec(this.typedReaders, this.multipartReader); addCodec(this.typedReaders, this.multipartReader);

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2024 the original author or authors. * Copyright 2002-2025 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -87,9 +87,6 @@ public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConv
addPartConverter(new Jaxb2RootElementHttpMessageConverter()); addPartConverter(new Jaxb2RootElementHttpMessageConverter());
} }
if (kotlinSerializationJsonPresent) {
addPartConverter(new KotlinSerializationJsonHttpMessageConverter());
}
if (jackson2Present) { if (jackson2Present) {
addPartConverter(new MappingJackson2HttpMessageConverter()); addPartConverter(new MappingJackson2HttpMessageConverter());
} }
@@ -99,6 +96,9 @@ public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConv
else if (jsonbPresent) { else if (jsonbPresent) {
addPartConverter(new JsonbHttpMessageConverter()); addPartConverter(new JsonbHttpMessageConverter());
} }
else if (kotlinSerializationJsonPresent) {
addPartConverter(new KotlinSerializationJsonHttpMessageConverter());
}
if (jackson2XmlPresent) { if (jackson2XmlPresent) {
addPartConverter(new MappingJackson2XmlHttpMessageConverter()); addPartConverter(new MappingJackson2XmlHttpMessageConverter());
@@ -111,15 +111,14 @@ public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConv
if (jackson2CborPresent) { if (jackson2CborPresent) {
addPartConverter(new MappingJackson2CborHttpMessageConverter()); addPartConverter(new MappingJackson2CborHttpMessageConverter());
} }
else if (kotlinSerializationCborPresent) {
addPartConverter(new KotlinSerializationCborHttpMessageConverter());
}
if (jackson2YamlPresent) { if (jackson2YamlPresent) {
addPartConverter(new MappingJackson2YamlHttpMessageConverter()); addPartConverter(new MappingJackson2YamlHttpMessageConverter());
} }
if (kotlinSerializationCborPresent) {
addPartConverter(new KotlinSerializationCborHttpMessageConverter());
}
if (kotlinSerializationProtobufPresent) { if (kotlinSerializationProtobufPresent) {
addPartConverter(new KotlinSerializationProtobufHttpMessageConverter()); addPartConverter(new KotlinSerializationProtobufHttpMessageConverter());
} }

View File

@@ -419,9 +419,6 @@ final class DefaultRestClientBuilder implements RestClient.Builder {
this.messageConverters.add(new ResourceHttpMessageConverter(false)); this.messageConverters.add(new ResourceHttpMessageConverter(false));
this.messageConverters.add(new AllEncompassingFormHttpMessageConverter()); this.messageConverters.add(new AllEncompassingFormHttpMessageConverter());
if (kotlinSerializationJsonPresent) {
this.messageConverters.add(new KotlinSerializationJsonHttpMessageConverter());
}
if (jackson2Present) { if (jackson2Present) {
this.messageConverters.add(new MappingJackson2HttpMessageConverter()); this.messageConverters.add(new MappingJackson2HttpMessageConverter());
} }
@@ -431,6 +428,9 @@ final class DefaultRestClientBuilder implements RestClient.Builder {
else if (jsonbPresent) { else if (jsonbPresent) {
this.messageConverters.add(new JsonbHttpMessageConverter()); this.messageConverters.add(new JsonbHttpMessageConverter());
} }
else if (kotlinSerializationJsonPresent) {
this.messageConverters.add(new KotlinSerializationJsonHttpMessageConverter());
}
if (jackson2SmilePresent) { if (jackson2SmilePresent) {
this.messageConverters.add(new MappingJackson2SmileHttpMessageConverter()); this.messageConverters.add(new MappingJackson2SmileHttpMessageConverter());
} }

View File

@@ -204,9 +204,6 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat
this.messageConverters.add(new KotlinSerializationProtobufHttpMessageConverter()); this.messageConverters.add(new KotlinSerializationProtobufHttpMessageConverter());
} }
if (kotlinSerializationJsonPresent) {
this.messageConverters.add(new KotlinSerializationJsonHttpMessageConverter());
}
if (jackson2Present) { if (jackson2Present) {
this.messageConverters.add(new MappingJackson2HttpMessageConverter()); this.messageConverters.add(new MappingJackson2HttpMessageConverter());
} }
@@ -216,6 +213,9 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat
else if (jsonbPresent) { else if (jsonbPresent) {
this.messageConverters.add(new JsonbHttpMessageConverter()); this.messageConverters.add(new JsonbHttpMessageConverter());
} }
else if (kotlinSerializationJsonPresent) {
this.messageConverters.add(new KotlinSerializationJsonHttpMessageConverter());
}
if (jackson2SmilePresent) { if (jackson2SmilePresent) {
this.messageConverters.add(new MappingJackson2SmileHttpMessageConverter()); this.messageConverters.add(new MappingJackson2SmileHttpMessageConverter());

View File

@@ -108,14 +108,16 @@ class RestTemplateTests {
template.setErrorHandler(errorHandler); template.setErrorHandler(errorHandler);
} }
@Test // gh-29008 @Test
void defaultMessageConvertersWithKotlinSerialization() { void defaultMessageConvertersWithoutKotlinSerialization() {
RestTemplate restTemplate = new RestTemplate(); RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> httpMessageConverters = restTemplate.getMessageConverters(); List<HttpMessageConverter<?>> httpMessageConverters = restTemplate.getMessageConverters();
assertThat(httpMessageConverters).extracting("class").containsOnlyOnce( assertThat(httpMessageConverters).extracting("class").containsOnlyOnce(
KotlinSerializationJsonHttpMessageConverter.class,
MappingJackson2HttpMessageConverter.class MappingJackson2HttpMessageConverter.class
); );
assertThat(httpMessageConverters).extracting("class").doesNotContain(
KotlinSerializationJsonHttpMessageConverter.class
);
} }
@Test @Test

View File

@@ -891,9 +891,6 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv
messageConverters.add(new Jaxb2RootElementHttpMessageConverter()); messageConverters.add(new Jaxb2RootElementHttpMessageConverter());
} }
if (kotlinSerializationCborPresent) {
messageConverters.add(new KotlinSerializationCborHttpMessageConverter());
}
if (kotlinSerializationProtobufPresent) { if (kotlinSerializationProtobufPresent) {
messageConverters.add(new KotlinSerializationProtobufHttpMessageConverter()); messageConverters.add(new KotlinSerializationProtobufHttpMessageConverter());
} }
@@ -929,6 +926,9 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv
} }
messageConverters.add(new MappingJackson2CborHttpMessageConverter(builder.build())); messageConverters.add(new MappingJackson2CborHttpMessageConverter(builder.build()));
} }
else if (kotlinSerializationCborPresent) {
messageConverters.add(new KotlinSerializationCborHttpMessageConverter());
}
if (jackson2YamlPresent) { if (jackson2YamlPresent) {
Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.yaml(); Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.yaml();
if (this.applicationContext != null) { if (this.applicationContext != null) {

View File

@@ -172,7 +172,7 @@ class WebMvcConfigurationSupportTests {
ApplicationContext context = initContext(WebConfig.class); ApplicationContext context = initContext(WebConfig.class);
RequestMappingHandlerAdapter adapter = context.getBean(RequestMappingHandlerAdapter.class); RequestMappingHandlerAdapter adapter = context.getBean(RequestMappingHandlerAdapter.class);
List<HttpMessageConverter<?>> converters = adapter.getMessageConverters(); List<HttpMessageConverter<?>> converters = adapter.getMessageConverters();
assertThat(converters).hasSizeGreaterThanOrEqualTo(14); assertThat(converters).hasSizeGreaterThanOrEqualTo(13);
converters.stream() converters.stream()
.filter(AbstractJackson2HttpMessageConverter.class::isInstance) .filter(AbstractJackson2HttpMessageConverter.class::isInstance)
.forEach(converter -> { .forEach(converter -> {