GH-1219: Fix header mapping for replies (@SendTo)
Resolves https://github.com/spring-projects/spring-amqp/issues/1219 The headers were mapped after message conversion. This prevented using a `ContentTypeDelegatingMessageConverter` because the content type was not set. Add a header to control whether the user or converter gets to set the content type property in the final message. **cherry-pick to 2.2.x, 2.1.x, 1.7.x**
This commit is contained in:
committed by
Artem Bilan
parent
5adbde2e74
commit
cf221da0da
@@ -2717,7 +2717,7 @@ public ReplyPostProcessor echoCustomHeader() {
|
||||
----
|
||||
====
|
||||
|
||||
The `@SendTo` value is assumed as a reply `exchange` and `routingKey` pair that follws the `exchange/routingKey` pattern,
|
||||
The `@SendTo` value is assumed as a reply `exchange` and `routingKey` pair that follows the `exchange/routingKey` pattern,
|
||||
where one of those parts can be omitted.
|
||||
The valid values are as follows:
|
||||
|
||||
@@ -2800,6 +2800,28 @@ public String listen(Message in) {
|
||||
----
|
||||
====
|
||||
|
||||
====== Reply ContentType
|
||||
|
||||
If you are using a sophisticated message converter, such as the `ContentTypeDelegatingMessageConverter`, you can control the content type of the reply by returning a `spring-messaging` `Message<?>`:
|
||||
|
||||
====
|
||||
[source, java]
|
||||
----
|
||||
@RabbitListener(queues = "q1")
|
||||
@SendTo("q2")
|
||||
public Message<String> listen(String in) {
|
||||
...
|
||||
return MessageBuilder.withPayload(in.toUpperCase())
|
||||
.setHeader(MessageHeaders.CONTENT_TYPE, "application/xml")
|
||||
.build();
|
||||
}
|
||||
----
|
||||
====
|
||||
|
||||
This content type will be passed in the `MessageProperties` to the converter.
|
||||
By default, for backwards compatibility, any content type property set by the converter will be overwritten by this value after conversion.
|
||||
If you wish to override that behavior, also set the `AmqpHeaders.CONTENT_TYPE_CONVERTER_WINS` to `true` and any value set by the converter will be retained.
|
||||
|
||||
[[annotation-method-selection]]
|
||||
====== Multi-method Listeners
|
||||
|
||||
|
||||
Reference in New Issue
Block a user