代码之家  ›  专栏  ›  技术社区  ›  Kris Swat

多参数构建url的Spring集成网关

  •  0
  • Kris Swat  · 技术社区  · 6 年前

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

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

    在上面的代码中,需要DYNAMIC来帮助我创建url

    <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>
    

    新代码 :

    <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"...
    ..>
    

    获取headers['DYNAMIC']值并继续。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Artem Bilan    6 年前

    是的,你能做到。你只需要加一个 @Header("DYNAMIC") 进入那个 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-mapping