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:
committed by
Artem Bilan
parent
efcba3a83a
commit
d4b7578627
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user