我需要通过Spring Integration的HTTP出站网关调用REST API。如何使用有效负载中的值替换路径变量。 Payload只有一个String值。以下代码段正在发送占位符。任何帮助表示赞赏。
@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 :(得分:2)
首先来看看@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
是什么。
payload.Message
表达式看起来很奇怪。从高处开始,它可能意味着MyClass.getMessage()
,但它无法调用getter,因为您使用属性名称作为大写。如果你真的有这样的吸气剂,那就像payload.message
一样使用它。否则,请详细说明。一些日志,StackTrace,关于payload
等的信息......它完全不清楚是什么问题。