diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/adapter/DelegatingInvocableHandler.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/adapter/DelegatingInvocableHandler.java index 4eb41443..a1345db9 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/adapter/DelegatingInvocableHandler.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/adapter/DelegatingInvocableHandler.java @@ -37,6 +37,7 @@ import org.springframework.expression.ParserContext; import org.springframework.expression.common.TemplateParserContext; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.messaging.Message; +import org.springframework.messaging.handler.annotation.Header; import org.springframework.messaging.handler.annotation.Payload; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.messaging.handler.invocation.InvocableHandlerMethod; @@ -189,11 +190,11 @@ public class DelegatingInvocableHandler { protected boolean matchHandlerMethod(Class payloadClass, InvocableHandlerMethod handler) { Method method = handler.getMethod(); Annotation[][] parameterAnnotations = method.getParameterAnnotations(); - // Single param; no annotation or @Payload + // Single param; no annotation or not @Header if (parameterAnnotations.length == 1) { MethodParameter methodParameter = new MethodParameter(method, 0); if (methodParameter.getParameterAnnotations().length == 0 - || methodParameter.hasParameterAnnotation(Payload.class)) { + || !methodParameter.hasParameterAnnotation(Header.class)) { if (methodParameter.getParameterType().isAssignableFrom(payloadClass)) { return true; } @@ -203,7 +204,7 @@ public class DelegatingInvocableHandler { for (int i = 0; i < parameterAnnotations.length; i++) { MethodParameter methodParameter = new MethodParameter(method, i); if (methodParameter.getParameterAnnotations().length == 0 - || methodParameter.hasParameterAnnotation(Payload.class)) { + || !methodParameter.hasParameterAnnotation(Header.class)) { if (methodParameter.getParameterType().isAssignableFrom(payloadClass)) { if (foundCandidate) { throw new AmqpException("Ambiguous payload parameter for " + method.toGenericString()); 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 f5e20fee..93c34d74 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 @@ -110,6 +110,7 @@ import org.springframework.core.PriorityOrdered; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.support.DefaultConversionService; +import org.springframework.lang.NonNull; import org.springframework.messaging.converter.GenericMessageConverter; import org.springframework.messaging.handler.annotation.Header; import org.springframework.messaging.handler.annotation.Payload; @@ -1325,7 +1326,7 @@ public class EnableRabbitIntegrationTests { @RabbitHandler @SendTo("#{sendToRepliesBean}") - public String bar(Bar bar) { + public String bar(@NonNull Bar bar) { return "BAR: " + bar.field; } @@ -1335,7 +1336,7 @@ public class EnableRabbitIntegrationTests { } @RabbitHandler - public String qux(@Header("amqp_receivedRoutingKey") String rk, @Payload Qux qux) { + public String qux(@Header("amqp_receivedRoutingKey") String rk, @NonNull @Payload Qux qux) { return "QUX: " + qux.field + ": " + rk; }