如何使用 spring 集成正确获取入站消息 headers
how to correctly get inbound message headers with spring integration
我收到了 spring 的电子邮件,其中包含一个非常基本的脚本
ApplicationContext ac = new ClassPathXmlApplicationContext("imap.xml");
DirectChannel inputChannel = ac.getBean("receiveChannel", DirectChannel.class);
inputChannel.subscribe(message -> {
System.out.println(message.getHeaders());
System.out.println(message.getPayload());
MessageHeaders headers = message.getHeaders();
String from = (String) headers.get("mail_from");
});
根据 documentation,我认为 headers 会被自动解析,但是第一个 System.out.println();
得到的 headers 只是
{id=c65f55aa-c611-71ee-c56d-6bf13c6f71d0, timestamp=1468869891279}
第二个输出(getPayload()
)是
org.springframework.integration.mail.AbstractMailReceiver$IntegrationMimeMessage@6af5615d
from
输出 null
...
然后我尝试使用 MailToStringTransformer
MailToStringTransformer a = transformer();
a.setCharset("utf-8");
System.out.println(a.transform(message));
它输出有效载荷和我所期望的所有 headers,但(自然地)作为字符串。
我需要做什么才能在 object 中获取消息 headers 和文本?
不确定您指的是哪个文档,但当前的 4.3
版本有:
By default, the payload of messages produced by the inbound adapters is the raw MimeMessage
; you can interrogate the headers and content using that object. Starting with version 4.3, you can provide a HeaderMapper<MimeMessage>
to map the headers to MessageHeaders
; for convenience, a DefaultMailHeaderMapper
is provided for this purpose.
下面一点:
When you do not provide a header mapper, the message payload is the MimeMessage presented by javax.mail. The framework provides a MailToStringTransformer
...
如果您需要对映射进行一些自定义,您始终可以提供自己的 HeaderMapper<MimeMessage>
实现或 DefaultMailHeaderMapper
扩展。
我收到了 spring 的电子邮件,其中包含一个非常基本的脚本
ApplicationContext ac = new ClassPathXmlApplicationContext("imap.xml");
DirectChannel inputChannel = ac.getBean("receiveChannel", DirectChannel.class);
inputChannel.subscribe(message -> {
System.out.println(message.getHeaders());
System.out.println(message.getPayload());
MessageHeaders headers = message.getHeaders();
String from = (String) headers.get("mail_from");
});
根据 documentation,我认为 headers 会被自动解析,但是第一个 System.out.println();
得到的 headers 只是
{id=c65f55aa-c611-71ee-c56d-6bf13c6f71d0, timestamp=1468869891279}
第二个输出(getPayload()
)是
org.springframework.integration.mail.AbstractMailReceiver$IntegrationMimeMessage@6af5615d
from
输出 null
...
然后我尝试使用 MailToStringTransformer
MailToStringTransformer a = transformer();
a.setCharset("utf-8");
System.out.println(a.transform(message));
它输出有效载荷和我所期望的所有 headers,但(自然地)作为字符串。
我需要做什么才能在 object 中获取消息 headers 和文本?
不确定您指的是哪个文档,但当前的 4.3
版本有:
By default, the payload of messages produced by the inbound adapters is the raw
MimeMessage
; you can interrogate the headers and content using that object. Starting with version 4.3, you can provide aHeaderMapper<MimeMessage>
to map the headers toMessageHeaders
; for convenience, aDefaultMailHeaderMapper
is provided for this purpose.
下面一点:
When you do not provide a header mapper, the message payload is the MimeMessage presented by javax.mail. The framework provides a
MailToStringTransformer
...
如果您需要对映射进行一些自定义,您始终可以提供自己的 HeaderMapper<MimeMessage>
实现或 DefaultMailHeaderMapper
扩展。