Spring集成提取程序中的有效负载

时间:2017-05-11 17:22:25

标签: lambda spring-integration dsl

  

我是使用DSL进行弹簧集成的新手,并且遇到了困难   在http处理程序中提取有效负载,以动态构造URI。   下面的集成流程由AccountList Gateway触发,并添加了   客户ID值对通道上的调用消息   " accountListFlow.input&#34 ;.并且有效负载仅包含' 123766123'   这就是客户ID传递。

     

此后,消息用标题丰富,然后传递   下游到处理程序。

     

我要求在处理程序中提取客户ID以动态构造URI。我尝试了泛型处理程序并将有效负载转换为String,但未能说不能转换lambda对象。这里有任何帮助如何   提取有效负载作为整体,这是客户ID时   请构建URI吗?

@MessagingGateway
public interface AccountList {

    @Gateway(requestChannel = "accountListFlow.input")
    List<String> accountListFlow(String customerId);
}


@Bean
public IntegrationFlow accountListFlow() {
    return flow -> flow.publishSubscribeChannel(s -> s.applySequence(true)
                            .subscribe(f -> f
                                       .enrichHeaders(h -> h.header("X-CUST-IP-Id","145.26.54.24"))
                            .handle((o, map) -> 
Http.outboundGateway("http://get-customers-product-holdings-gb-hbeu-v3-v3-cert.cf.wgdc-drn-01.cloud.uk/api/customers/"+(String)o+"/product-holdings?categoryCode=cc,cbs,sd")
    .httpMethod(HttpMethod.GET)
    .mappedRequestHeaders("X-CUST-IP-Id")
    .expectedResponseType(String.class)
    .extractPayload(true)).channel("aggregateAccount.input"));
}

1 个答案:

答案 0 :(得分:0)

尝试...

.handle(Http.outboundGateway("http://get-customers-product-holdings-gb-hbeu-v3-v3-cert.cf.wgdc-drn-01.cloud.uk/api/customers/{customer}/product-holdings?categoryCode=cc,cbs,sd")
    .httpMethod(HttpMethod.GET)
    .mappedRequestHeaders("X-CUST-IP-Id")
    .expectedResponseType(String.class)
    .uriVariable("customer", "payload")
    .extractPayload(true))
.channel("aggregateAccount.input"));

请注意网址中的{customer}变量。