From 529bb63d863302066097a4b00753c401b7d8e0dd Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Tue, 16 Apr 2019 13:14:04 -0400 Subject: [PATCH] Add typed header getter method * Polishing - PR Comments --- .../springframework/amqp/core/MessageProperties.java | 12 ++++++++++++ .../annotation/EnableRabbitIntegrationTests.java | 11 +++++++++++ 2 files changed, 23 insertions(+) diff --git a/spring-amqp/src/main/java/org/springframework/amqp/core/MessageProperties.java b/spring-amqp/src/main/java/org/springframework/amqp/core/MessageProperties.java index dd4c095a..3b224db4 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/core/MessageProperties.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/core/MessageProperties.java @@ -136,6 +136,18 @@ public class MessageProperties implements Serializable { this.headers.put(key, value); } + /** + * Typed getter for a header. + * @param headerName the header name. + * @param the type. + * @return the header value + * @since 2.2 + */ + @SuppressWarnings("unchecked") + public T getHeader(String headerName) { + return (T) this.headers.get(headerName); + } + public Map getHeaders() { return this.headers; } diff --git a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java index cbcbb6c4..4ce36a59 100644 --- a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java +++ b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/EnableRabbitIntegrationTests.java @@ -546,6 +546,8 @@ public class EnableRabbitIntegrationTests { MessagePostProcessor messagePostProcessor = message -> { message.getMessageProperties().setContentType("application/json"); message.getMessageProperties().setUserId("guest"); + message.getMessageProperties().setHeader("stringHeader", "string"); + message.getMessageProperties().setHeader("intHeader", 42); return message; }; returned = template.convertSendAndReceive("", "test.converted", "{ \"bar\" : \"baz\" }", messagePostProcessor); @@ -581,6 +583,9 @@ public class EnableRabbitIntegrationTests { messagePostProcessor); assertThat(returned, instanceOf(byte[].class)); assertEquals("\"fooMessage\"", new String((byte[]) returned)); + Foo2Service foo2service = ctx.getBean(Foo2Service.class); + assertThat(foo2service.stringHeader, equalTo("string")); + assertThat(foo2service.intHeader, equalTo(42)); returned = template.convertSendAndReceive("", "test.notconverted.channel", "{ \"bar\" : \"baz\" }", messagePostProcessor); @@ -1953,6 +1958,10 @@ public class EnableRabbitIntegrationTests { public static class Foo2Service { + String stringHeader; + + Integer intHeader; + @RabbitListener(queues = "test.converted") public Foo2 foo2(Foo2 foo2) { return foo2; @@ -1990,6 +1999,8 @@ public class EnableRabbitIntegrationTests { @RabbitListener(queues = "test.notconverted.message") public String justMessage(Message message) { + this.stringHeader = message.getMessageProperties().getHeader("stringHeader"); + this.intHeader = message.getMessageProperties().getHeader("intHeader"); return "foo" + message.getClass().getSimpleName(); }