GH-1236: Handle non-String contentType

Resolves https://github.com/spring-projects/spring-amqp/issues/1236

The user may set the contentType to a `MimeType`.

Always use `toString()` when replacing the `contentType`.

**cherry-pick to 2.2.x, 2.1.x, 1.7.x**

(cherry picked from commit 8c7e4f95ee)

# Conflicts:
#	spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/ContentTypeDelegatingMessageConverterIntegrationTests.java
This commit is contained in:
Gary Russell
2020-08-05 12:16:40 -04:00
committed by Artem Bilan
parent efcba3a83a
commit d4b7578627
2 changed files with 4 additions and 3 deletions

View File

@@ -108,9 +108,9 @@ public class MessagingMessageConverter implements MessageConverter, Initializing
input.getPayload(), messageProperties);
// Default previous behavior of mapper wins for backwards compatibility.
if (!Boolean.TRUE.equals(input.getHeaders().get(AmqpHeaders.CONTENT_TYPE_CONVERTER_WINS))) {
String contentType = input.getHeaders().get(MessageHeaders.CONTENT_TYPE, String.class);
Object contentType = input.getHeaders().get(MessageHeaders.CONTENT_TYPE);
if (contentType != null) {
messageProperties.setContentType(contentType);
messageProperties.setContentType(contentType.toString());
}
}
return amqpMessage;

View File

@@ -47,6 +47,7 @@ import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.MimeType;
/**
* @author Gary Russell
@@ -172,7 +173,7 @@ public class ContentTypeDelegatingMessageConverterIntegrationTests {
@SendTo("#{@queue2.name}")
public org.springframework.messaging.Message<String> listen1(String in) {
MessageBuilder<String> builder = MessageBuilder.withPayload(in)
.setHeader(MessageHeaders.CONTENT_TYPE, "baz/qux");
.setHeader(MessageHeaders.CONTENT_TYPE, MimeType.valueOf("baz/qux"));
if ("bar".equals(in)) {
builder.setHeader(AmqpHeaders.CONTENT_TYPE_CONVERTER_WINS, true);
}