如何在bean方法中获取头值

aru*_*nky 3 spring spring-integration

我有自定义bean,我在spring集成流程中使用它.它有一个方法,它将hashmap作为参数,并且它的值是动态设置的.我试图从有效负载头字段(iploc)设置值,但我无法实现.我尝试了一些拼写的组合,但它不起作用.有什么指针吗?

<int:transformer id="ws.transformer"
    input-channel="ws.transformer.in" output-channel="ws.transformer.out">
    <bean class="com.my.Mybean">
        <property name="map">
            <map>
                <entry key="user">
                    <value>"admin"</value>
                </entry>
                <entry key="location">
                    <value>"headers['iploc']"</value>
                </entry>            
            </map>
        </property>
    </bean>
</int:transformer> 
Run Code Online (Sandbox Code Playgroud)

我可以在服务激活器中设置值,但我正在尝试,如果我在SI配置本身实现这一点.

omn*_*nom 5

Spring Integration Transformer可以使用整个Message(有效负载和头文件),因此传递头部值没有任何意义,因为变换器已经可以访问所有消息头.

您的变换器bean定义应该只包含这些不是来自Message转换的属性:

<int:transformer id="ws.transformer" input-channel="ws.transformer.in" output-channel="ws.transformer.out">
  <bean class="com.my.MyTransformer">
    <property name="user" value="admin"/>                    
  </bean>
</int:transformer> 
Run Code Online (Sandbox Code Playgroud)

而你的变压器方法:

@Transformer
OutgoingPayload transform(IncomingPayload payload, @Header("iploc") String iplocHeader) {
    return doTransform(...);
}
Run Code Online (Sandbox Code Playgroud)

或者只是消费整个消息:

Message<OutgoingPayload> transform(Message<IncomingPayload> message) {
  final String ipLocHeaderValue = message.getHeaders.get("iploc", String.class);
  return doTransform(...);
}
Run Code Online (Sandbox Code Playgroud)