这应该是一个简单的问题,但我无法在线找到合适的文档。我想这样做:
@MessagingGateway(name = "redemptionGateway", defaultRequestChannel = Channels.GATEWAY_OUTPUT, defaultHeaders = @GatewayHeader(name = "orderId", expression = "#redemption.orderId"))
public interface RedemptionGateway {
void create(TrivialRedemption redemption);
}
我显然使用错误的陈述来引用orderId
的{{1}}成员:
org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 0): Property or field 'orderId' cannot be found on null
答案 0 :(得分:2)
行。看
@GatewayHeader(name = "orderId", expression = "#redemption.orderId")
此SpEL在运行时根据构建MessageHeaders
的实际参数进行评估,以便发送目标Message
。
这就是它的样子:
private StandardEvaluationContext createMethodInvocationEvaluationContext(Object[] arguments) {
StandardEvaluationContext context = ExpressionUtils.createStandardEvaluationContext(this.beanFactory);
context.setVariable("args", arguments);
context.setVariable("gatewayMethod", this.method);
return context;
}
因此,EvaluationContext
增加了两个变量args
和gatewayMethod
。
如你所见,他们的名字没有任何参数。无论如何,这对所有JVM都有用吗?
您可以使用args
:
expression = "#args[0].orderId"