1、当使用@RabbitListener注解时,且Jackson2JsonMessageConverter的setTypePrecedence默认为TypePrecedence.INFERRED时即默认为从接收方法端参数类型推断出反序列化类型,此时接收消息方法参数分情况如下:
a、当只有一个非注释参数,或者使用@Payload注释的参数时取到推断的反序列化类型。
b、我们忽略org.springframework.amqp.core.Message类型的参数,因为它们不涉及转换。
c、注意,org.springframework.messaging.Message类型参数会取到实际参数类型getActualTypeArguments()。
判断逻辑的源码如下:
org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.MessagingMessageConverterAdapter:
private final class MessagingMessageConverterAdapter extends MessagingMessageConverter {
private final Object bean;
private final Method method;
private final Type inferredArgumentType;
private MessagingMessageConverterAdapter(Object bean, Method method) {
this.bean = bean;
this.method = method;
this.inferredArgumentType = determineInferredType();