我有自定义 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/