Skip to content

Commit bb3ada4

Browse files
meloningsdeleuze
authored andcommitted
Fix Kotlin Serialization converter registration logic
This commit fixes Kotlin Serialization converter registration logic in RestTemplate, AbstractMessageBrokerConfiguration and AllEncompassingFormHttpMessageConverter classes to be similar to the one in WebMvcConfigurationSupport. Closes gh-29008
1 parent 6a68bd5 commit bb3ada4

File tree

5 files changed

+28
-13
lines changed

5 files changed

+28
-13
lines changed

spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,9 @@ public CompositeMessageConverter brokerMessageConverter() {
461461
if (registerDefaults) {
462462
converters.add(new StringMessageConverter());
463463
converters.add(new ByteArrayMessageConverter());
464+
if (kotlinSerializationJsonPresent) {
465+
converters.add(new KotlinSerializationJsonMessageConverter());
466+
}
464467
if (jackson2Present) {
465468
converters.add(createJacksonConverter());
466469
}
@@ -470,9 +473,6 @@ else if (gsonPresent) {
470473
else if (jsonbPresent) {
471474
converters.add(new JsonbMessageConverter());
472475
}
473-
else if (kotlinSerializationJsonPresent) {
474-
converters.add(new KotlinSerializationJsonMessageConverter());
475-
}
476476
}
477477
return new CompositeMessageConverter(converters);
478478
}

spring-messaging/src/test/java/org/springframework/messaging/simp/config/MessageBrokerConfigurationTests.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.springframework.messaging.converter.CompositeMessageConverter;
4040
import org.springframework.messaging.converter.ContentTypeResolver;
4141
import org.springframework.messaging.converter.DefaultContentTypeResolver;
42+
import org.springframework.messaging.converter.KotlinSerializationJsonMessageConverter;
4243
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
4344
import org.springframework.messaging.converter.MessageConverter;
4445
import org.springframework.messaging.converter.StringMessageConverter;
@@ -282,12 +283,13 @@ public void configureMessageConvertersDefault() {
282283
CompositeMessageConverter compositeConverter = config.brokerMessageConverter();
283284

284285
List<MessageConverter> converters = compositeConverter.getConverters();
285-
assertThat(converters).hasSize(3);
286+
assertThat(converters).hasSize(4);
286287
assertThat(converters.get(0)).isInstanceOf(StringMessageConverter.class);
287288
assertThat(converters.get(1)).isInstanceOf(ByteArrayMessageConverter.class);
288-
assertThat(converters.get(2)).isInstanceOf(MappingJackson2MessageConverter.class);
289+
assertThat(converters.get(2)).isInstanceOf(KotlinSerializationJsonMessageConverter.class);
290+
assertThat(converters.get(3)).isInstanceOf(MappingJackson2MessageConverter.class);
289291

290-
ContentTypeResolver resolver = ((MappingJackson2MessageConverter) converters.get(2)).getContentTypeResolver();
292+
ContentTypeResolver resolver = ((MappingJackson2MessageConverter) converters.get(3)).getContentTypeResolver();
291293
assertThat(((DefaultContentTypeResolver) resolver).getDefaultMimeType()).isEqualTo(MimeTypeUtils.APPLICATION_JSON);
292294
}
293295

@@ -340,11 +342,12 @@ protected boolean configureMessageConverters(List<MessageConverter> messageConve
340342
};
341343
CompositeMessageConverter compositeConverter = config.brokerMessageConverter();
342344

343-
assertThat(compositeConverter.getConverters()).hasSize(4);
345+
assertThat(compositeConverter.getConverters()).hasSize(5);
344346
Iterator<MessageConverter> iterator = compositeConverter.getConverters().iterator();
345347
assertThat(iterator.next()).isEqualTo(testConverter);
346348
assertThat(iterator.next()).isInstanceOf(StringMessageConverter.class);
347349
assertThat(iterator.next()).isInstanceOf(ByteArrayMessageConverter.class);
350+
assertThat(iterator.next()).isInstanceOf(KotlinSerializationJsonMessageConverter.class);
348351
assertThat(iterator.next()).isInstanceOf(MappingJackson2MessageConverter.class);
349352
}
350353

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ public AllEncompassingFormHttpMessageConverter() {
8787
}
8888
}
8989

90+
if (kotlinSerializationJsonPresent) {
91+
addPartConverter(new KotlinSerializationJsonHttpMessageConverter());
92+
}
9093
if (jackson2Present) {
9194
addPartConverter(new MappingJackson2HttpMessageConverter());
9295
}
@@ -96,9 +99,6 @@ else if (gsonPresent) {
9699
else if (jsonbPresent) {
97100
addPartConverter(new JsonbHttpMessageConverter());
98101
}
99-
else if (kotlinSerializationJsonPresent) {
100-
addPartConverter(new KotlinSerializationJsonHttpMessageConverter());
101-
}
102102

103103
if (jackson2XmlPresent && !shouldIgnoreXml) {
104104
addPartConverter(new MappingJackson2XmlHttpMessageConverter());

spring-web/src/main/java/org/springframework/web/client/RestTemplate.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,9 @@ else if (jaxb2Present) {
174174
}
175175
}
176176

177+
if (kotlinSerializationJsonPresent) {
178+
this.messageConverters.add(new KotlinSerializationJsonHttpMessageConverter());
179+
}
177180
if (jackson2Present) {
178181
this.messageConverters.add(new MappingJackson2HttpMessageConverter());
179182
}
@@ -183,9 +186,6 @@ else if (gsonPresent) {
183186
else if (jsonbPresent) {
184187
this.messageConverters.add(new JsonbHttpMessageConverter());
185188
}
186-
else if (kotlinSerializationJsonPresent) {
187-
this.messageConverters.add(new KotlinSerializationJsonHttpMessageConverter());
188-
}
189189

190190
if (jackson2SmilePresent) {
191191
this.messageConverters.add(new MappingJackson2SmileHttpMessageConverter());

spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
import org.springframework.http.client.SimpleClientHttpRequestFactory;
5252
import org.springframework.http.converter.GenericHttpMessageConverter;
5353
import org.springframework.http.converter.HttpMessageConverter;
54+
import org.springframework.http.converter.json.KotlinSerializationJsonHttpMessageConverter;
55+
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
5456
import org.springframework.util.StreamUtils;
5557
import org.springframework.web.util.DefaultUriBuilderFactory;
5658

@@ -103,6 +105,16 @@ void setup() {
103105
template.setErrorHandler(errorHandler);
104106
}
105107

108+
@Test // gh-29008
109+
void defaultMessageConvertersWithKotlinSerialization() {
110+
RestTemplate restTemplate = new RestTemplate();
111+
List<HttpMessageConverter<?>> httpMessageConverters = restTemplate.getMessageConverters();
112+
assertThat(httpMessageConverters).extracting("class").containsOnlyOnce(
113+
KotlinSerializationJsonHttpMessageConverter.class,
114+
MappingJackson2HttpMessageConverter.class
115+
);
116+
}
117+
106118
@Test
107119
void constructorPreconditions() {
108120
assertThatIllegalArgumentException()

0 commit comments

Comments
 (0)