spring - 如何在bean方法中获取 header 值

标签 spring spring-integration

我有自定义 bean,我在 spring 集成流程中使用它。它具有将 hashmap 作为参数的方法,其值是动态设置的。我正在尝试从有效负载 header 字段 (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> 

我也可以在服务激活器中设置值,但如果我在 SI 配置本身中实现它,我正在尝试。

最佳答案

Spring Integration Transformer 可以使用整个 Message(有效负载和 header ),因此没有必要按属性传递 header 值,因为 transformer 已经可以访问所有消息 header 。

你的转换器 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> 

还有你的转换器方法:

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

或者只是消费整个消息:

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

关于spring - 如何在bean方法中获取 header 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15746599/

相关文章:

java - Mockito 和 Spring Autowiring

mongodb - 在 Spring 集成中借助 mongo 入站适配器对数据进行分页

java - 如何配置 spring-integration-sftp 将远程文件下载到本地文件系统后移动?

java - 在 jsp 中显示 JasperReport 生成的 html 报告的最佳方式是什么?

java - 在集成测试中使用 redis 禁用 spring session

java - 如何在 JUnit 测试初始化​​时模拟 Bean 所需的文件

java - JSP和SPRING启动: Generate CSV file from JSON input?

Spring 集成 - SFTP 在复制后重命名或移动远程服务器中的文件

java - Spring集成流程: perform task within flow

java - Spring集成中的输出 channel 和回复 channel 有什么区别?