2017-02-24 73 views
0

我需要通過Spring Integration的HTTP出站網關調用REST API。如何用有效載荷中的值替換路徑變量。 Payload只有一個字符串值。下面的代碼片段發送佔位符。任何幫助表示讚賞。HTTP出站網關 - 傳遞URI參數

@Bean 
public MessageHandler httpGateway(@Value("http://localhost:8080/api/test-resource/v1/{parameter1}/codes") URI uri) { 
    HttpRequestExecutingMessageHandler httpHandler = new HttpRequestExecutingMessageHandler(uri); 
    httpHandler.setExpectedResponseType(Map.class); 
    httpHandler.setHttpMethod(HttpMethod.GET); 
    Map<String, Expression> uriVariableExp = new HashMap(); 

    SpelExpressionParser parser = new SpelExpressionParser(); 

    uriVariableExp.put("parameter1", parser.parseExpression("payload.Message")); 
    httpHandler.setUriVariableExpressions(uriVariableExp); 
    return httpHandler; 
} 

回答

0

讓我們來看看@Value首先是什麼!

* Annotation at the field or method/constructor parameter level 
* that indicates a default value expression for the affected argument. 
* 
* <p>Typically used for expression-driven dependency injection. Also supported 
* for dynamic resolution of handler method parameters, e.g. in Spring MVC. 
* 
* <p>A common use case is to assign default field values using 
* "#{systemProperties.myProp}" style expressions. 

展望您的示例沒有什麼可以解決的依賴注入值。

你可以使用:

new HttpRequestExecutingMessageHandler("http://localhost:8080/api/test-resource/v1/{parameter1}/codes"); 

雖然沒有在這種情況下,重要...

你的代碼看起來不錯,除非我們不知道你的​​是什麼。 那payload.Message表情看起來很奇怪。從很大的高度來看,它可能意味着像MyClass.getMessage(),但它不能調用getter,因爲您使用大寫的屬性名稱。如果你真的有這樣一個吸氣劑,那麼就像payload.message一樣使用它。否則,請詳細說明。一些日誌,StackTrace,關於​​等的信息......完全不清楚是什麼問題。

+0

謝謝阿爾喬姆。現在工作正常。我已經將url移至application.properties並更新瞭如下所示的表達式uriVariableExp.put(「parameter1」,parser.parseExpression(「payload」)); – Sarath