使用多个参数构造url的Spring Integration网关



在当前模型中,我们有一个REST端点,它获取requestbody,基于此创建jms文本消息并发送到jms队列

TextMessage outMessage = session.createTextMessage(messagePayloadText);
..          
outMessage.setStringProperty("clientType", clientType);
outMessage.setStringProperty("DYNAMIC", dynaHeader);

在上面的代码动态是需要帮助我创建我们的网址

<int:chain input-channel="gCStatusInChannel" output-channel="headerFilterChannel">
<int:header-enricher>           
<int:header name="Api-Key" value="B8872853E8B"></int:header>
<int:header name="Accept" value="application/json" /> 
<int:header name="Content-Type" value="application/json" />         
</int:header-enricher>      
<int-http:outbound-gateway  
url="https://i-zaie.sr13.tst.bst/ia-zaaie/rest/search/v2/cReference/{cref}"
http-method="PUT"               
header-mapper="headerMapper" 
expected-response-type="java.lang.String"
encode-uri="false"
request-factory="sslFactory">               
<int-http:uri-variable name="cref" expression="headers['DYNAMIC']" />                 
</int-http:outbound-gateway>
<int:object-to-string-transformer></int:object-to-string-transformer>
</int:chain>

在这种模式下一切正常。现在我想使用网关而不是JMS

新代码

<int:gateway id="gService"
service-interface="n.d.lr.eai.gw.GGateway"
default-reply-channel="dest-channel"
default-request-timeout="5000" default-reply-timeout="5000">
<int:method name="vCreateSignal" request-channel="vCreateSignalInChannel"/> ...

问题:我可以在网关中有如下方法吗?

public String vCreateSignal(String caseDat, String dynamic);

我该怎么做才能启用

<int:chain input-channel="gCStatusInChannel"...
..>

以获取标头['DYNAMIC']值并继续。

是的,你可以做到。您只需要在dynamic参数中添加一个@Header("DYNAMIC")

public String vCreateSignal(String caseDat, @Header("DYNAMIC") String dynamic);

当你调用这个网关的方法时,你只需要指定一个参数,它就会被映射到一个合适的头,所有这些:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints-chapter.html#gateway-映射

最新更新