与负载交换 header 并保持 header 完整

exchange header with payload and keep headers intact

我有一个带有 headers x ,y,z 的消息负载 我想删除负载并将新负载设为 header y 的值并保留 headers x y z intact.I 我正在尝试使用 groovy .messagePayload 是一个 json 字符串,它是 header y

的值

我的新消息 = header x y x+ 负载 其中 payload = valueof header y

def messagePayload  = parser.parseText(headers['y'])

def newHeaders = [:] 
newHeaders.putAll(headers)
return org.springframework.messaging.support.MessageBuilder.withPayload(messagePayload.toString()).copyHeaders(newHeaders).build()​

??

newHeaders['y'] = messagePayload.toString() 只是用它自己的值 (toString()) 替换 headers['y'],由 def messagePayload = parser.parseText(headers['y'])

决定

您没有显示足够的代码,但您需要像

这样的东西
newHeaders['y'] = originalPayload

编辑

你说你想交换 header 与负载。如果您只想将有效负载复制到 header,请使用 header enricher

<int:header-enricher>
    <int:header name="y" expression="payload" />
</int:header-enricher>

如果你想用代码来做...

MessageBuilder.fromMessage(message).setHeader("y", message.getPayload()).build;

EDIT2

你的问题还不是很清楚; parser.parseText(headers['y']) 是做什么的?

如果您只想用 header 值之一替换消息负载,请使用转换:

<int:transform ... expression="headers['y']" />

header将保持不变。

如果要写成java

 MessageBuilder.withPayload(headers.get("y")).copyHeaders(headers).build();

我猜 groovy 是

 MessageBuilder.withPayload(headers.['y']).copyHeaders(headers).build();