Spring Integration自定义Feed入站通道适配器

时间:2017-05-09 18:34:48

标签: spring-integration

我正在使用Spring Integration和Feed入站通道适配器来处理新闻RSS提要(我认为这很棒:)。我还想将一些API提供的其他新闻源用于同一个频道。 API只是一个HTTP端点,它返回JSON中的新闻文章列表。这些字段与RSS非常相似,即标题,描述,发布日期可以映射到SyndEntry对象。

理想情况下,我想使用Feed入站通道适配器中可用的相同功能来处理重复的条目等。是否可以自定义Feed入站通道适配器来处理和映射JSON?

任何示例代码或指针都非常有用。

1 个答案:

答案 0 :(得分:0)

嗯,不。 bwasta = (Button) findViewById(R.id.btDes); final Button bwasta = (Button) findViewById(R.id.btDes); bwasta.setEnabled(false); bwasta.postDelayed(new Runnable() { public void run() { bwasta.setEnabled(true); 完全基于Rome Tools,它只处理XML模型。

我担心您必须创建自己的组件,这些组件将为这些JSON记录生成FeedEntryMessageSource个实例。这可能类似于SyndEntry,基于HttpRequestExecutingMessageHandlerRestTemplate默认情况下存在。

您可以尝试将MappingJackson2HttpMessageConverter配置为HttpRequestExecutingMessageHandler,并期望在回复中包含setExpectedResponseType(SyndFeedImpl.class)内容类型。

要实现“处理重复条目”,您可以考虑在之后使用Idempotent Receiver模式。 application/json应基于MessageSelector且真正预先形成与MetadaStore中的逻辑类似的逻辑:

FeedEntryMessageSource

其中 if (lastModifiedDate != null) { this.lastTime = lastModifiedDate.getTime(); } else { this.lastTime += 1; //NOSONAR - single poller thread } this.metadataStore.put(this.metadataKey, this.lastTime + ""); ... if ((entryDate != null && entryDate.getTime() > this.lastTime) entry payload FeedEntry来自splitted的结果。