1

이 질문은 간단한 질문이지만 온라인에서 적절한 문서를 찾을 수 없습니다. 나는이 작업을 수행 할 수 :@GatewayHeader에서 매개 변수의 속성을 참조하는 데 SPEL을 사용하는 방법

@MessagingGateway(name = "redemptionGateway", defaultRequestChannel = Channels.GATEWAY_OUTPUT, defaultHeaders = @GatewayHeader(name = "orderId", expression = "#redemption.orderId")) 
public interface RedemptionGateway { 
    void create(TrivialRedemption redemption); 
} 

을 내가 분명히 redemptionorderId 멤버를 참조하는 잘못된 문을 사용하고 있습니다 :

 
org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 0): Property or field 'orderId' cannot be found on null 

답변

2

확인을 클릭합니다.

@GatewayHeader(name = "orderId", expression = "#redemption.orderId") 

봐이 SpEL을 보내고을 대상 Message에 대한 MessageHeaders를 구축하는 실제 인수에 대한 런타임에 평가됩니다.

그리고 그 보이는 방법입니다

private StandardEvaluationContext createMethodInvocationEvaluationContext(Object[] arguments) { 
    StandardEvaluationContext context = ExpressionUtils.createStandardEvaluationContext(this.beanFactory); 
    context.setVariable("args", arguments); 

    context.setVariable("gatewayMethod", this.method); 
    return context; 
} 

그래서, EvaluationContext이 두 변수 argsgatewayMethod 풍부합니다.

위에서 알 수 있듯이 이름별로 인수가 없습니다. 어쨌든 모든 JVM에서 작동합니까?

당신은 args에서 매개 변수 인덱스를 사용하여 목표를 달성 할 수

expression = "#args[0].orderId" 
+0

다양한 대답을! –