diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java index fa7ef11fe049..3583a151935a 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java @@ -461,6 +461,9 @@ public CompositeMessageConverter brokerMessageConverter() { if (registerDefaults) { converters.add(new StringMessageConverter()); converters.add(new ByteArrayMessageConverter()); + if (kotlinSerializationJsonPresent) { + converters.add(new KotlinSerializationJsonMessageConverter()); + } if (jackson2Present) { converters.add(createJacksonConverter()); } @@ -470,9 +473,6 @@ else if (gsonPresent) { else if (jsonbPresent) { converters.add(new JsonbMessageConverter()); } - else if (kotlinSerializationJsonPresent) { - converters.add(new KotlinSerializationJsonMessageConverter()); - } } return new CompositeMessageConverter(converters); } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/config/MessageBrokerConfigurationTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/config/MessageBrokerConfigurationTests.java index b31e95942bef..3110f6b9eec0 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/config/MessageBrokerConfigurationTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/config/MessageBrokerConfigurationTests.java @@ -39,6 +39,7 @@ import org.springframework.messaging.converter.CompositeMessageConverter; import org.springframework.messaging.converter.ContentTypeResolver; import org.springframework.messaging.converter.DefaultContentTypeResolver; +import org.springframework.messaging.converter.KotlinSerializationJsonMessageConverter; import org.springframework.messaging.converter.MappingJackson2MessageConverter; import org.springframework.messaging.converter.MessageConverter; import org.springframework.messaging.converter.StringMessageConverter; @@ -282,12 +283,13 @@ public void configureMessageConvertersDefault() { CompositeMessageConverter compositeConverter = config.brokerMessageConverter(); List converters = compositeConverter.getConverters(); - assertThat(converters).hasSize(3); + assertThat(converters).hasSize(4); assertThat(converters.get(0)).isInstanceOf(StringMessageConverter.class); assertThat(converters.get(1)).isInstanceOf(ByteArrayMessageConverter.class); - assertThat(converters.get(2)).isInstanceOf(MappingJackson2MessageConverter.class); + assertThat(converters.get(2)).isInstanceOf(KotlinSerializationJsonMessageConverter.class); + assertThat(converters.get(3)).isInstanceOf(MappingJackson2MessageConverter.class); - ContentTypeResolver resolver = ((MappingJackson2MessageConverter) converters.get(2)).getContentTypeResolver(); + ContentTypeResolver resolver = ((MappingJackson2MessageConverter) converters.get(3)).getContentTypeResolver(); assertThat(((DefaultContentTypeResolver) resolver).getDefaultMimeType()).isEqualTo(MimeTypeUtils.APPLICATION_JSON); } @@ -340,11 +342,12 @@ protected boolean configureMessageConverters(List messageConve }; CompositeMessageConverter compositeConverter = config.brokerMessageConverter(); - assertThat(compositeConverter.getConverters()).hasSize(4); + assertThat(compositeConverter.getConverters()).hasSize(5); Iterator iterator = compositeConverter.getConverters().iterator(); assertThat(iterator.next()).isEqualTo(testConverter); assertThat(iterator.next()).isInstanceOf(StringMessageConverter.class); assertThat(iterator.next()).isInstanceOf(ByteArrayMessageConverter.class); + assertThat(iterator.next()).isInstanceOf(KotlinSerializationJsonMessageConverter.class); assertThat(iterator.next()).isInstanceOf(MappingJackson2MessageConverter.class); } diff --git a/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java index 78d64e5da471..f75f85400fc8 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java @@ -87,6 +87,9 @@ public AllEncompassingFormHttpMessageConverter() { } } + if (kotlinSerializationJsonPresent) { + addPartConverter(new KotlinSerializationJsonHttpMessageConverter()); + } if (jackson2Present) { addPartConverter(new MappingJackson2HttpMessageConverter()); } @@ -96,9 +99,6 @@ else if (gsonPresent) { else if (jsonbPresent) { addPartConverter(new JsonbHttpMessageConverter()); } - else if (kotlinSerializationJsonPresent) { - addPartConverter(new KotlinSerializationJsonHttpMessageConverter()); - } if (jackson2XmlPresent && !shouldIgnoreXml) { addPartConverter(new MappingJackson2XmlHttpMessageConverter()); diff --git a/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java b/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java index 22662632475f..98902d6f0194 100644 --- a/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java +++ b/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java @@ -174,6 +174,9 @@ else if (jaxb2Present) { } } + if (kotlinSerializationJsonPresent) { + this.messageConverters.add(new KotlinSerializationJsonHttpMessageConverter()); + } if (jackson2Present) { this.messageConverters.add(new MappingJackson2HttpMessageConverter()); } @@ -183,9 +186,6 @@ else if (gsonPresent) { else if (jsonbPresent) { this.messageConverters.add(new JsonbHttpMessageConverter()); } - else if (kotlinSerializationJsonPresent) { - this.messageConverters.add(new KotlinSerializationJsonHttpMessageConverter()); - } if (jackson2SmilePresent) { this.messageConverters.add(new MappingJackson2SmileHttpMessageConverter()); diff --git a/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java b/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java index c95c60cb28f7..3df1ce1f28a7 100644 --- a/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java +++ b/spring-web/src/test/java/org/springframework/web/client/RestTemplateTests.java @@ -51,6 +51,8 @@ import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.converter.GenericHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.KotlinSerializationJsonHttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.util.StreamUtils; import org.springframework.web.util.DefaultUriBuilderFactory; @@ -103,6 +105,16 @@ void setup() { template.setErrorHandler(errorHandler); } + @Test // gh-29008 + void defaultMessageConvertersWithKotlinSerialization() { + RestTemplate restTemplate = new RestTemplate(); + List> httpMessageConverters = restTemplate.getMessageConverters(); + assertThat(httpMessageConverters).extracting("class").containsOnlyOnce( + KotlinSerializationJsonHttpMessageConverter.class, + MappingJackson2HttpMessageConverter.class + ); + } + @Test void constructorPreconditions() { assertThatIllegalArgumentException()