diff --git a/spring-core/src/main/java/org/springframework/util/ObjectUtils.java b/spring-core/src/main/java/org/springframework/util/ObjectUtils.java
index 397ff3a7cc..83428aa32a 100644
--- a/spring-core/src/main/java/org/springframework/util/ObjectUtils.java
+++ b/spring-core/src/main/java/org/springframework/util/ObjectUtils.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -132,14 +132,13 @@ public abstract class ObjectUtils {
* @see CollectionUtils#isEmpty(java.util.Collection)
* @see CollectionUtils#isEmpty(java.util.Map)
*/
- @SuppressWarnings("rawtypes")
public static boolean isEmpty(@Nullable Object obj) {
if (obj == null) {
return true;
}
if (obj instanceof Optional) {
- return !((Optional) obj).isPresent();
+ return !((Optional>) obj).isPresent();
}
if (obj instanceof CharSequence) {
return ((CharSequence) obj).length() == 0;
@@ -148,10 +147,10 @@ public abstract class ObjectUtils {
return Array.getLength(obj) == 0;
}
if (obj instanceof Collection) {
- return ((Collection) obj).isEmpty();
+ return ((Collection>) obj).isEmpty();
}
if (obj instanceof Map) {
- return ((Map) obj).isEmpty();
+ return ((Map, ?>) obj).isEmpty();
}
// else
@@ -611,9 +610,7 @@ public abstract class ObjectUtils {
if (obj == null) {
return EMPTY_STRING;
}
- String className = obj.getClass().getName();
- String identityHexString = getIdentityHexString(obj);
- return className + '@' + identityHexString;
+ return obj.getClass().getName() + "@" + getIdentityHexString(obj);
}
/**
diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java
index d8823c1800..f4a8cf31f1 100644
--- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java
+++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java
@@ -457,11 +457,11 @@ public class MappingJackson2MessageConverter implements SmartMessageConverter, B
}
Class> mappedClass = this.idClassMappings.get(typeId);
if (mappedClass != null) {
- return this.objectMapper.getTypeFactory().constructType(mappedClass);
+ return this.objectMapper.constructType(mappedClass);
}
try {
Class> typeClass = ClassUtils.forName(typeId, this.beanClassLoader);
- return this.objectMapper.getTypeFactory().constructType(typeClass);
+ return this.objectMapper.constructType(typeClass);
}
catch (Throwable ex) {
throw new MessageConversionException("Failed to resolve type id [" + typeId + "]", ex);
diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java
index 0dd92e1206..3617635950 100644
--- a/spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java
+++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -92,7 +92,7 @@ public abstract class AbstractMessageConverter implements SmartMessageConverter
}
/**
- * Allows sub-classes to add more supported mime types.
+ * Allows subclasses to add more supported mime types.
* @since 5.2.2
*/
protected void addSupportedMimeTypes(MimeType... supportedMimeTypes) {
@@ -167,21 +167,6 @@ public abstract class AbstractMessageConverter implements SmartMessageConverter
}
- /**
- * Returns the default content type for the payload. Called when
- * {@link #toMessage(Object, MessageHeaders)} is invoked without message headers or
- * without a content type header.
- *
By default, this returns the first element of the {@link #getSupportedMimeTypes()
- * supportedMimeTypes}, if any. Can be overridden in sub-classes.
- * @param payload the payload being converted to message
- * @return the content type, or {@code null} if not known
- */
- @Nullable
- protected MimeType getDefaultContentType(Object payload) {
- List mimeTypes = getSupportedMimeTypes();
- return (!mimeTypes.isEmpty() ? mimeTypes.get(0) : null);
- }
-
@Override
@Nullable
public final Object fromMessage(Message> message, Class> targetClass) {
@@ -197,10 +182,6 @@ public abstract class AbstractMessageConverter implements SmartMessageConverter
return convertFromInternal(message, targetClass, conversionHint);
}
- protected boolean canConvertFrom(Message> message, Class> targetClass) {
- return (supports(targetClass) && supportsMimeType(message.getHeaders()));
- }
-
@Override
@Nullable
public final Message> toMessage(Object payload, @Nullable MessageHeaders headers) {
@@ -240,6 +221,11 @@ public abstract class AbstractMessageConverter implements SmartMessageConverter
return builder.build();
}
+
+ protected boolean canConvertFrom(Message> message, Class> targetClass) {
+ return (supports(targetClass) && supportsMimeType(message.getHeaders()));
+ }
+
protected boolean canConvertTo(Object payload, @Nullable MessageHeaders headers) {
return (supports(payload.getClass()) && supportsMimeType(headers));
}
@@ -265,6 +251,22 @@ public abstract class AbstractMessageConverter implements SmartMessageConverter
return (headers != null && this.contentTypeResolver != null ? this.contentTypeResolver.resolve(headers) : null);
}
+ /**
+ * Return the default content type for the payload. Called when
+ * {@link #toMessage(Object, MessageHeaders)} is invoked without
+ * message headers or without a content type header.
+ * By default, this returns the first element of the
+ * {@link #getSupportedMimeTypes() supportedMimeTypes}, if any.
+ * Can be overridden in subclasses.
+ * @param payload the payload being converted to a message
+ * @return the content type, or {@code null} if not known
+ */
+ @Nullable
+ protected MimeType getDefaultContentType(Object payload) {
+ List mimeTypes = getSupportedMimeTypes();
+ return (!mimeTypes.isEmpty() ? mimeTypes.get(0) : null);
+ }
+
/**
* Whether the given class is supported by this converter.
diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java
index fe4a194f0a..e0c0129cbd 100644
--- a/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java
+++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java
@@ -41,6 +41,7 @@ import org.springframework.lang.Nullable;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
import org.springframework.util.Assert;
+import org.springframework.util.ClassUtils;
import org.springframework.util.MimeType;
/**
@@ -139,6 +140,7 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter {
}
}
+
@Override
protected boolean canConvertFrom(Message> message, @Nullable Class> targetClass) {
if (targetClass == null || !supportsMimeType(message.getHeaders())) {
@@ -210,7 +212,7 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter {
Object payload = message.getPayload();
Class> view = getSerializationView(conversionHint);
try {
- if (targetClass.isInstance(payload)) {
+ if (ClassUtils.isAssignableValue(targetClass, payload)) {
return payload;
}
else if (payload instanceof byte[]) {
@@ -246,7 +248,7 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter {
Type genericParameterType = param.getNestedGenericParameterType();
Class> contextClass = param.getContainingClass();
Type type = GenericTypeResolver.resolveType(genericParameterType, contextClass);
- return this.objectMapper.getTypeFactory().constructType(type);
+ return this.objectMapper.constructType(type);
}
return this.objectMapper.constructType(targetClass);
}
@@ -331,7 +333,7 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter {
* @return the JSON encoding to use (never {@code null})
*/
protected JsonEncoding getJsonEncoding(@Nullable MimeType contentType) {
- if (contentType != null && (contentType.getCharset() != null)) {
+ if (contentType != null && contentType.getCharset() != null) {
Charset charset = contentType.getCharset();
for (JsonEncoding encoding : JsonEncoding.values()) {
if (charset.name().equals(encoding.getJavaName())) {
diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/MarshallingMessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/MarshallingMessageConverter.java
index ccc21edf09..31e9b8223a 100644
--- a/spring-messaging/src/main/java/org/springframework/messaging/converter/MarshallingMessageConverter.java
+++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/MarshallingMessageConverter.java
@@ -46,6 +46,8 @@ import org.springframework.util.MimeType;
*
* @author Arjen Poutsma
* @since 4.2
+ * @see Marshaller
+ * @see Unmarshaller
*/
public class MarshallingMessageConverter extends AbstractMessageConverter {
@@ -61,7 +63,8 @@ public class MarshallingMessageConverter extends AbstractMessageConverter {
* {@link #setUnmarshaller(Unmarshaller)} to be invoked separately.
*/
public MarshallingMessageConverter() {
- this(new MimeType("application", "xml"), new MimeType("text", "xml"), new MimeType("application", "*+xml"));
+ this(new MimeType("application", "xml"), new MimeType("text", "xml"),
+ new MimeType("application", "*+xml"));
}
/**
@@ -160,7 +163,7 @@ public class MarshallingMessageConverter extends AbstractMessageConverter {
return new StreamSource(new ByteArrayInputStream((byte[]) payload));
}
else {
- return new StreamSource(new StringReader((String) payload));
+ return new StreamSource(new StringReader(payload.toString()));
}
}
diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/ProtobufMessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/ProtobufMessageConverter.java
index a597207739..085957e4d4 100644
--- a/spring-messaging/src/main/java/org/springframework/messaging/converter/ProtobufMessageConverter.java
+++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/ProtobufMessageConverter.java
@@ -120,9 +120,9 @@ public class ProtobufMessageConverter extends AbstractMessageConverter {
@Override
protected boolean canConvertTo(Object payload, @Nullable MessageHeaders headers) {
- MimeType mimeType = getMimeType(headers);
+ MimeType contentType = getMimeType(headers);
return (super.canConvertTo(payload, headers) ||
- this.protobufFormatSupport != null && this.protobufFormatSupport.supportsWriteOnly(mimeType));
+ this.protobufFormatSupport != null && this.protobufFormatSupport.supportsWriteOnly(contentType));
}
@Override
diff --git a/spring-messaging/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java b/spring-messaging/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java
index efca6b26fe..1e69ff4137 100644
--- a/spring-messaging/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java
+++ b/spring-messaging/src/test/java/org/springframework/messaging/converter/MappingJackson2MessageConverterTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2019 the original author or authors.
+ * Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -48,10 +48,9 @@ public class MappingJackson2MessageConverterTests {
@Test
public void defaultConstructor() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
- assertThat(converter.getSupportedMimeTypes())
- .contains(new MimeType("application", "json"));
+ assertThat(converter.getSupportedMimeTypes()).contains(new MimeType("application", "json"));
assertThat(converter.getObjectMapper().getDeserializationConfig()
- .isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)).isFalse();
+ .isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)).isFalse();
}
@Test // SPR-12724
@@ -60,7 +59,7 @@ public class MappingJackson2MessageConverterTests {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(mimetype);
assertThat(converter.getSupportedMimeTypes()).contains(mimetype);
assertThat(converter.getObjectMapper().getDeserializationConfig()
- .isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)).isFalse();
+ .isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)).isFalse();
}
@Test // SPR-12724
@@ -70,19 +69,14 @@ public class MappingJackson2MessageConverterTests {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(jsonMimetype, xmlMimetype);
assertThat(converter.getSupportedMimeTypes()).contains(jsonMimetype, xmlMimetype);
assertThat(converter.getObjectMapper().getDeserializationConfig()
- .isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)).isFalse();
+ .isEnabled(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)).isFalse();
}
@Test
public void fromMessage() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
- String payload = "{" +
- "\"bytes\":\"AQI=\"," +
- "\"array\":[\"Foo\",\"Bar\"]," +
- "\"number\":42," +
- "\"string\":\"Foo\"," +
- "\"bool\":true," +
- "\"fraction\":42.0}";
+ String payload = "{\"bytes\":\"AQI=\",\"array\":[\"Foo\",\"Bar\"]," +
+ "\"number\":42,\"string\":\"Foo\",\"bool\":true,\"fraction\":42.0}";
Message> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build();
MyBean actual = (MyBean) converter.fromMessage(message, MyBean.class);
@@ -97,8 +91,8 @@ public class MappingJackson2MessageConverterTests {
@Test
public void fromMessageUntyped() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
- String payload = "{\"bytes\":\"AQI=\",\"array\":[\"Foo\",\"Bar\"],"
- + "\"number\":42,\"string\":\"Foo\",\"bool\":true,\"fraction\":42.0}";
+ String payload = "{\"bytes\":\"AQI=\",\"array\":[\"Foo\",\"Bar\"]," +
+ "\"number\":42,\"string\":\"Foo\",\"bool\":true,\"fraction\":42.0}";
Message> message = MessageBuilder.withPayload(payload.getBytes(StandardCharsets.UTF_8)).build();
@SuppressWarnings("unchecked")
HashMap actual = (HashMap) converter.fromMessage(message, HashMap.class);
@@ -111,7 +105,7 @@ public class MappingJackson2MessageConverterTests {
assertThat(actual.get("bytes")).isEqualTo("AQI=");
}
- @Test // gh-22386
+ @Test // gh-22386
public void fromMessageMatchingInstance() {
MyBean myBean = new MyBean();
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
@@ -137,7 +131,7 @@ public class MappingJackson2MessageConverterTests {
assertThat(myBean.getString()).isEqualTo("string");
}
- @Test // SPR-16252
+ @Test // SPR-16252
public void fromMessageToList() throws Exception {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
String payload = "[1, 2, 3, 4, 5, 6, 7, 8, 9]";
@@ -151,7 +145,7 @@ public class MappingJackson2MessageConverterTests {
assertThat(actual).isEqualTo(Arrays.asList(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L));
}
- @Test // SPR-16486
+ @Test // SPR-16486
public void fromMessageToMessageWithPojo() throws Exception {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
String payload = "{\"string\":\"foo\"}";
@@ -198,7 +192,7 @@ public class MappingJackson2MessageConverterTests {
String payload = "H\u00e9llo W\u00f6rld";
Message> message = converter.toMessage(payload, headers);
- assertThat(new String((byte[]) message.getPayload(), StandardCharsets.UTF_16BE)).isEqualTo(("\"" + payload + "\""));
+ assertThat(new String((byte[]) message.getPayload(), StandardCharsets.UTF_16BE)).isEqualTo("\"" + payload + "\"");
assertThat(message.getHeaders().get(MessageHeaders.CONTENT_TYPE)).isEqualTo(contentType);
}
@@ -214,7 +208,7 @@ public class MappingJackson2MessageConverterTests {
String payload = "H\u00e9llo W\u00f6rld";
Message> message = converter.toMessage(payload, headers);
- assertThat(message.getPayload()).isEqualTo(("\"" + payload + "\""));
+ assertThat(message.getPayload()).isEqualTo("\"" + payload + "\"");
assertThat(message.getHeaders().get(MessageHeaders.CONTENT_TYPE)).isEqualTo(contentType);
}
@@ -254,9 +248,12 @@ public class MappingJackson2MessageConverterTests {
public void jsonViewPayload(@JsonView(MyJacksonView2.class) JacksonViewBean payload) {
}
- void handleList(List payload) {}
+ void handleList(List payload) {
+ }
+
+ void handleMessage(Message message) {
+ }
- void handleMessage(Message message) {}
public static class MyBean {
diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Decoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Decoder.java
index daf06e3d55..a0b400ef7d 100644
--- a/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Decoder.java
+++ b/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Decoder.java
@@ -97,7 +97,7 @@ public abstract class AbstractJackson2Decoder extends Jackson2CodecSupport imple
@Override
public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) {
- JavaType javaType = getObjectMapper().getTypeFactory().constructType(elementType.getType());
+ JavaType javaType = getObjectMapper().constructType(elementType.getType());
// Skip String: CharSequenceDecoder + "*/*" comes after
return (!CharSequence.class.isAssignableFrom(elementType.toClass()) &&
getObjectMapper().canDeserialize(javaType) && supportsMimeType(mimeType));
diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java
index 6162be280c..a6720f5082 100644
--- a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java
+++ b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java
@@ -27,7 +27,6 @@ import java.util.Map;
import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.type.TypeFactory;
import org.apache.commons.logging.Log;
import org.springframework.core.GenericTypeResolver;
@@ -111,8 +110,7 @@ public abstract class Jackson2CodecSupport {
}
protected JavaType getJavaType(Type type, @Nullable Class> contextClass) {
- TypeFactory typeFactory = this.objectMapper.getTypeFactory();
- return typeFactory.constructType(GenericTypeResolver.resolveType(type, contextClass));
+ return this.objectMapper.constructType(GenericTypeResolver.resolveType(type, contextClass));
}
protected Map getHints(ResolvableType resolvableType) {
diff --git a/spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverter.java
index 55260af656..a0583b9c6d 100644
--- a/spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverter.java
+++ b/spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverter.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 the original author or authors.
+ * Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,7 +25,7 @@ import org.springframework.http.MediaType;
import org.springframework.lang.Nullable;
/**
- * Strategy interface that specifies a converter that can convert from and to HTTP requests and responses.
+ * Strategy interface for converting from and to HTTP requests and responses.
*
* @author Arjen Poutsma
* @author Juergen Hoeller
diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java
index bf6f1ca48c..7f3b59fee4 100644
--- a/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java
+++ b/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java
@@ -43,7 +43,6 @@ import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.exc.InvalidDefinitionException;
import com.fasterxml.jackson.databind.ser.FilterProvider;
-import com.fasterxml.jackson.databind.type.TypeFactory;
import org.springframework.core.GenericTypeResolver;
import org.springframework.http.HttpInputMessage;
@@ -377,8 +376,7 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener
* @return the Jackson JavaType
*/
protected JavaType getJavaType(Type type, @Nullable Class> contextClass) {
- TypeFactory typeFactory = this.objectMapper.getTypeFactory();
- return typeFactory.constructType(GenericTypeResolver.resolveType(type, contextClass));
+ return this.objectMapper.constructType(GenericTypeResolver.resolveType(type, contextClass));
}
/**
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 d8bb4f730f..c1b875b545 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
@@ -21,7 +21,6 @@ import java.lang.reflect.Type;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -110,9 +109,8 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat
ClassLoader classLoader = RestTemplate.class.getClassLoader();
romePresent = ClassUtils.isPresent("com.rometools.rome.feed.WireFeed", classLoader);
jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", classLoader);
- jackson2Present =
- ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) &&
- ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader);
+ jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", classLoader) &&
+ ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", classLoader);
jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader);
jackson2SmilePresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.smile.SmileFactory", classLoader);
jackson2CborPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.cbor.CBORFactory", classLoader);
@@ -918,7 +916,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat
HttpHeaders httpHeaders = httpRequest.getHeaders();
HttpHeaders requestHeaders = this.requestEntity.getHeaders();
if (!requestHeaders.isEmpty()) {
- requestHeaders.forEach((key, values) -> httpHeaders.put(key, new LinkedList<>(values)));
+ requestHeaders.forEach((key, values) -> httpHeaders.put(key, new ArrayList<>(values)));
}
if (httpHeaders.getContentLength() < 0) {
httpHeaders.setContentLength(0L);
@@ -937,7 +935,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat
(GenericHttpMessageConverter