Следующий код выдает MessagingException
с сообщением At most one parameter (or expression via method-level @Payload) may be mapped to the payload or Message. Found more than one on method [public abstract java.lang.Integer org.example.PayloadAndGatewayHeader$ArithmeticGateway.add(int,int)]
.
@MessagingGateway
interface ArithmeticGateway {
@Gateway(requestChannel = "add.input", headers = @GatewayHeader(name = "operand", expression = "#args[1]"))
Integer add(@Payload final int a, final int b);
}
Желаемая функциональность может быть достигнута с помощью чего-то вроде:
@MessagingGateway
interface ArithmeticGateway {
@Gateway(requestChannel = "add.input", headers = @GatewayHeader(name = "operand", expression = "#args[1]"))
@Payload("#args[0]")
Integer add(final int a, final int b);
}
Если первая версия такжеРабота?Тем не менее, я считаю, что сообщение об ошибке можно улучшить.
Пример проекта можно найти здесь .Пожалуйста, проверьте org.example.PayloadAndGatewayHeader и org.example.PayloadAndGatewayHeaderTest.
EDIT
Цель @GatewayHeader
состояла в том, чтобы показать, почему можно захотеть иметь дополнительные параметрыэто не будет частью полезной нагрузки, но я боюсь, что это создало путаницу.Вот более упрощенный пример:
@MessagingGateway
interface ArithmeticGateway {
@Gateway(requestChannel = "identity.input")
Integer identity(@Payload final int a, final int unused);
}
Не следует ли игнорировать параметр unused
, поскольку уже есть другой, который помечен @Payload
?