Merge branch '5.3.x'

This commit is contained in:
Sébastien Deleuze 2022-09-02 11:19:55 +02:00
commit 7214b1e03c
5 changed files with 28 additions and 13 deletions

View File

@ -465,6 +465,9 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
if (registerDefaults) { if (registerDefaults) {
converters.add(new StringMessageConverter()); converters.add(new StringMessageConverter());
converters.add(new ByteArrayMessageConverter()); converters.add(new ByteArrayMessageConverter());
if (kotlinSerializationJsonPresent) {
converters.add(new KotlinSerializationJsonMessageConverter());
}
if (jackson2Present) { if (jackson2Present) {
converters.add(createJacksonConverter()); converters.add(createJacksonConverter());
} }
@ -474,9 +477,6 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
else if (jsonbPresent) { else if (jsonbPresent) {
converters.add(new JsonbMessageConverter()); converters.add(new JsonbMessageConverter());
} }
else if (kotlinSerializationJsonPresent) {
converters.add(new KotlinSerializationJsonMessageConverter());
}
} }
return new CompositeMessageConverter(converters); return new CompositeMessageConverter(converters);
} }

View File

@ -39,6 +39,7 @@ import org.springframework.messaging.converter.ByteArrayMessageConverter;
import org.springframework.messaging.converter.CompositeMessageConverter; import org.springframework.messaging.converter.CompositeMessageConverter;
import org.springframework.messaging.converter.ContentTypeResolver; import org.springframework.messaging.converter.ContentTypeResolver;
import org.springframework.messaging.converter.DefaultContentTypeResolver; import org.springframework.messaging.converter.DefaultContentTypeResolver;
import org.springframework.messaging.converter.KotlinSerializationJsonMessageConverter;
import org.springframework.messaging.converter.MappingJackson2MessageConverter; import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.converter.MessageConverter; import org.springframework.messaging.converter.MessageConverter;
import org.springframework.messaging.converter.StringMessageConverter; import org.springframework.messaging.converter.StringMessageConverter;
@ -282,12 +283,13 @@ public class MessageBrokerConfigurationTests {
CompositeMessageConverter compositeConverter = config.brokerMessageConverter(); CompositeMessageConverter compositeConverter = config.brokerMessageConverter();
List<MessageConverter> converters = compositeConverter.getConverters(); List<MessageConverter> converters = compositeConverter.getConverters();
assertThat(converters).hasSize(3); assertThat(converters).hasSize(4);
assertThat(converters.get(0)).isInstanceOf(StringMessageConverter.class); assertThat(converters.get(0)).isInstanceOf(StringMessageConverter.class);
assertThat(converters.get(1)).isInstanceOf(ByteArrayMessageConverter.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); assertThat(((DefaultContentTypeResolver) resolver).getDefaultMimeType()).isEqualTo(MimeTypeUtils.APPLICATION_JSON);
} }
@ -340,11 +342,12 @@ public class MessageBrokerConfigurationTests {
}; };
CompositeMessageConverter compositeConverter = config.brokerMessageConverter(); CompositeMessageConverter compositeConverter = config.brokerMessageConverter();
assertThat(compositeConverter.getConverters()).hasSize(4); assertThat(compositeConverter.getConverters()).hasSize(5);
Iterator<MessageConverter> iterator = compositeConverter.getConverters().iterator(); Iterator<MessageConverter> iterator = compositeConverter.getConverters().iterator();
assertThat(iterator.next()).isEqualTo(testConverter); assertThat(iterator.next()).isEqualTo(testConverter);
assertThat(iterator.next()).isInstanceOf(StringMessageConverter.class); assertThat(iterator.next()).isInstanceOf(StringMessageConverter.class);
assertThat(iterator.next()).isInstanceOf(ByteArrayMessageConverter.class); assertThat(iterator.next()).isInstanceOf(ByteArrayMessageConverter.class);
assertThat(iterator.next()).isInstanceOf(KotlinSerializationJsonMessageConverter.class);
assertThat(iterator.next()).isInstanceOf(MappingJackson2MessageConverter.class); assertThat(iterator.next()).isInstanceOf(MappingJackson2MessageConverter.class);
} }

View File

@ -87,6 +87,9 @@ public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConv
} }
} }
if (kotlinSerializationJsonPresent) {
addPartConverter(new KotlinSerializationJsonHttpMessageConverter());
}
if (jackson2Present) { if (jackson2Present) {
addPartConverter(new MappingJackson2HttpMessageConverter()); addPartConverter(new MappingJackson2HttpMessageConverter());
} }
@ -96,9 +99,6 @@ 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 && !shouldIgnoreXml) { if (jackson2XmlPresent && !shouldIgnoreXml) {
addPartConverter(new MappingJackson2XmlHttpMessageConverter()); addPartConverter(new MappingJackson2XmlHttpMessageConverter());

View File

@ -175,6 +175,9 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat
} }
} }
if (kotlinSerializationJsonPresent) {
this.messageConverters.add(new KotlinSerializationJsonHttpMessageConverter());
}
if (jackson2Present) { if (jackson2Present) {
this.messageConverters.add(new MappingJackson2HttpMessageConverter()); this.messageConverters.add(new MappingJackson2HttpMessageConverter());
} }
@ -184,9 +187,6 @@ 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

@ -50,6 +50,8 @@ import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.GenericHttpMessageConverter; import org.springframework.http.converter.GenericHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter; 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.util.StreamUtils;
import org.springframework.web.util.DefaultUriBuilderFactory; import org.springframework.web.util.DefaultUriBuilderFactory;
@ -102,6 +104,16 @@ class RestTemplateTests {
template.setErrorHandler(errorHandler); template.setErrorHandler(errorHandler);
} }
@Test // gh-29008
void defaultMessageConvertersWithKotlinSerialization() {
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> httpMessageConverters = restTemplate.getMessageConverters();
assertThat(httpMessageConverters).extracting("class").containsOnlyOnce(
KotlinSerializationJsonHttpMessageConverter.class,
MappingJackson2HttpMessageConverter.class
);
}
@Test @Test
void constructorPreconditions() { void constructorPreconditions() {
assertThatIllegalArgumentException() assertThatIllegalArgumentException()