HTTP出站网关 - 传递URI参数

时间:2017-02-24 09:21:23

标签: spring-integration

我需要通过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;
}

1 个答案:

答案 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等的信息......它完全不清楚是什么问题。